From 2767accc1bd0daab44c4199422742e1cd8f56d8f Mon Sep 17 00:00:00 2001 From: Arjun Roy Date: Fri, 23 Aug 2019 14:49:26 -0700 Subject: [PATCH] Fixed init-order-fiasco for static slice table. Fixes init-order bug affecting https://github.com/grpc/grpc/issues/19819 which was first exposed by this commit: https://github.com/grpc/grpc/commit/857375a1420df184963ed83f638dd21ea359aa37 --- .../filters/client_channel/client_channel.cc | 4 +- .../transport/chttp2/transport/hpack_table.cc | 2 +- .../transport/chttp2/transport/hpack_table.h | 4 +- src/core/lib/slice/slice_intern.cc | 20 +- src/core/lib/slice/slice_internal.h | 2 +- src/core/lib/slice/slice_utils.h | 8 +- src/core/lib/surface/init.cc | 3 + src/core/lib/transport/metadata.cc | 8 +- src/core/lib/transport/static_metadata.cc | 1648 +++++++---------- src/core/lib/transport/static_metadata.h | 454 ++--- test/core/slice/slice_test.cc | 10 +- test/core/transport/metadata_test.cc | 2 +- test/core/transport/status_metadata_test.cc | 5 +- tools/codegen/core/gen_static_metadata.py | 214 ++- 14 files changed, 1152 insertions(+), 1232 deletions(-) diff --git a/src/core/ext/filters/client_channel/client_channel.cc b/src/core/ext/filters/client_channel/client_channel.cc index 429828b0241..60b99c39a7a 100644 --- a/src/core/ext/filters/client_channel/client_channel.cc +++ b/src/core/ext/filters/client_channel/client_channel.cc @@ -3163,8 +3163,8 @@ void CallData::AddRetriableSendInitialMetadataOp( SubchannelCallRetryState* retry_state, SubchannelCallBatchData* batch_data) { // Maps the number of retries to the corresponding metadata value slice. - static const grpc_slice* retry_count_strings[] = { - &GRPC_MDSTR_1, &GRPC_MDSTR_2, &GRPC_MDSTR_3, &GRPC_MDSTR_4}; + const grpc_slice* retry_count_strings[] = {&GRPC_MDSTR_1, &GRPC_MDSTR_2, + &GRPC_MDSTR_3, &GRPC_MDSTR_4}; // We need to make a copy of the metadata batch for each attempt, since // the filters in the subchannel stack may modify this batch, and we don't // want those modifications to be passed forward to subsequent attempts. diff --git a/src/core/ext/transport/chttp2/transport/hpack_table.cc b/src/core/ext/transport/chttp2/transport/hpack_table.cc index f86332c6bc3..68d3ec49fda 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_table.cc +++ b/src/core/ext/transport/chttp2/transport/hpack_table.cc @@ -189,7 +189,7 @@ grpc_chttp2_hptbl_find_result grpc_chttp2_hptbl_find( /* See if the string is in the static table */ for (i = 0; i < GRPC_CHTTP2_LAST_STATIC_ENTRY; i++) { - grpc_mdelem ent = grpc_static_mdelem_manifested[i]; + grpc_mdelem ent = grpc_static_mdelem_manifested()[i]; if (!grpc_slice_eq(GRPC_MDKEY(md), GRPC_MDKEY(ent))) continue; r.index = i + 1u; r.has_value = grpc_slice_eq(GRPC_MDVALUE(md), GRPC_MDVALUE(ent)); diff --git a/src/core/ext/transport/chttp2/transport/hpack_table.h b/src/core/ext/transport/chttp2/transport/hpack_table.h index 699b7eccaf2..a1aa77f5446 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_table.h +++ b/src/core/ext/transport/chttp2/transport/hpack_table.h @@ -104,7 +104,7 @@ inline grpc_mdelem grpc_chttp2_hptbl_lookup(const grpc_chttp2_hptbl* tbl, reading the core static metadata table here; at that point we'd need our own singleton static metadata in the correct order. */ return index <= GRPC_CHTTP2_LAST_STATIC_ENTRY - ? grpc_static_mdelem_manifested[index - 1] + ? grpc_static_mdelem_manifested()[index - 1] : grpc_chttp2_hptbl_lookup_dynamic_index(tbl, index); } /* add a table entry to the index */ @@ -120,7 +120,7 @@ size_t grpc_chttp2_get_size_in_hpack_table(grpc_mdelem elem, inline uintptr_t grpc_chttp2_get_static_hpack_table_index(grpc_mdelem md) { uintptr_t index = reinterpret_cast(GRPC_MDELEM_DATA(md)) - - grpc_static_mdelem_table; + grpc_static_mdelem_table(); if (index < GRPC_CHTTP2_LAST_STATIC_ENTRY) { return index + 1; // Hpack static metadata element indices start at 1 } diff --git a/src/core/lib/slice/slice_intern.cc b/src/core/lib/slice/slice_intern.cc index 13fe1ab40e9..d813e5195ad 100644 --- a/src/core/lib/slice/slice_intern.cc +++ b/src/core/lib/slice/slice_intern.cc @@ -138,11 +138,12 @@ grpc_slice grpc_slice_maybe_static_intern(grpc_slice slice, for (uint32_t i = 0; i <= max_static_metadata_hash_probe; i++) { static_metadata_hash_ent ent = static_metadata_hash[(hash + i) % GPR_ARRAY_SIZE(static_metadata_hash)]; + const grpc_core::StaticMetadataSlice* static_slice_table = + grpc_static_slice_table(); if (ent.hash == hash && ent.idx < GRPC_STATIC_MDSTR_COUNT && - grpc_slice_eq_static_interned(slice, - grpc_static_slice_table[ent.idx])) { + grpc_slice_eq_static_interned(slice, static_slice_table[ent.idx])) { *returned_slice_is_different = true; - return grpc_static_slice_table[ent.idx]; + return static_slice_table[ent.idx]; } } @@ -168,10 +169,11 @@ static const grpc_core::StaticMetadataSlice* MatchStaticSlice( for (uint32_t i = 0; i <= max_static_metadata_hash_probe; i++) { static_metadata_hash_ent ent = static_metadata_hash[(hash + i) % GPR_ARRAY_SIZE(static_metadata_hash)]; + const grpc_core::StaticMetadataSlice* static_slice_table = + grpc_static_slice_table(); if (ent.hash == hash && ent.idx < GRPC_STATIC_MDSTR_COUNT && - grpc_static_slice_table[ent.idx].Equals( - std::forward(args)...)) { - return &grpc_static_slice_table[ent.idx]; + static_slice_table[ent.idx].Equals(std::forward(args)...)) { + return &static_slice_table[ent.idx]; } } return nullptr; @@ -318,9 +320,11 @@ void grpc_slice_intern_init(void) { static_metadata_hash[i].idx = GRPC_STATIC_MDSTR_COUNT; } max_static_metadata_hash_probe = 0; + const grpc_core::StaticMetadataSlice* static_slice_table = + grpc_static_slice_table(); for (size_t i = 0; i < GRPC_STATIC_MDSTR_COUNT; i++) { grpc_static_metadata_hash_values[i] = - grpc_slice_default_hash_internal(grpc_static_slice_table[i]); + grpc_slice_default_hash_internal(static_slice_table[i]); for (size_t j = 0; j < GPR_ARRAY_SIZE(static_metadata_hash); j++) { size_t slot = (grpc_static_metadata_hash_values[i] + j) % GPR_ARRAY_SIZE(static_metadata_hash); @@ -336,7 +340,7 @@ void grpc_slice_intern_init(void) { } // Handle KV hash for all static mdelems. for (size_t i = 0; i < GRPC_STATIC_MDELEM_COUNT; ++i) { - grpc_static_mdelem_table[i].HashInit(); + grpc_static_mdelem_table()[i].HashInit(); } } diff --git a/src/core/lib/slice/slice_internal.h b/src/core/lib/slice/slice_internal.h index e61f57c01ab..49ad15d5a56 100644 --- a/src/core/lib/slice/slice_internal.h +++ b/src/core/lib/slice/slice_internal.h @@ -182,7 +182,7 @@ struct StaticSliceRefcount { index(index) {} grpc_slice_refcount base; - uint32_t index; + const uint32_t index; }; extern grpc_slice_refcount kNoopRefcount; diff --git a/src/core/lib/slice/slice_utils.h b/src/core/lib/slice/slice_utils.h index e80de6d2ece..a4e19a9a61b 100644 --- a/src/core/lib/slice/slice_utils.h +++ b/src/core/lib/slice/slice_utils.h @@ -153,10 +153,14 @@ struct ExternallyManagedSlice : public UnmanagedMemorySlice { }; struct StaticMetadataSlice : public ManagedMemorySlice { - StaticMetadataSlice(grpc_slice_refcount* ref, size_t length, uint8_t* bytes) { + StaticMetadataSlice(grpc_slice_refcount* ref, size_t length, + const uint8_t* bytes) { refcount = ref; data.refcounted.length = length; - data.refcounted.bytes = bytes; + // NB: grpc_slice may or may not point to a static slice, but we are + // definitely pointing to static data here. Since we are not changing + // the underlying C-type, we need a const_cast here. + data.refcounted.bytes = const_cast(bytes); } }; diff --git a/src/core/lib/surface/init.cc b/src/core/lib/surface/init.cc index 2a6d307ddab..c02b4021763 100644 --- a/src/core/lib/surface/init.cc +++ b/src/core/lib/surface/init.cc @@ -134,6 +134,7 @@ void grpc_init(void) { grpc_core::Fork::GlobalInit(); grpc_fork_handlers_auto_register(); grpc_stats_init(); + grpc_init_static_metadata_ctx(); grpc_slice_intern_init(); grpc_mdctx_global_init(); grpc_channel_init_init(); @@ -191,6 +192,8 @@ void grpc_shutdown_internal_locked(void) { grpc_core::ApplicationCallbackExecCtx::GlobalShutdown(); g_shutting_down = false; gpr_cv_broadcast(g_shutting_down_cv); + // Absolute last action will be to delete static metadata context. + grpc_destroy_static_metadata_ctx(); } void grpc_shutdown_internal(void* ignored) { diff --git a/src/core/lib/transport/metadata.cc b/src/core/lib/transport/metadata.cc index 4242923283e..76017207d47 100644 --- a/src/core/lib/transport/metadata.cc +++ b/src/core/lib/transport/metadata.cc @@ -269,9 +269,9 @@ void grpc_mdctx_global_shutdown() { #ifndef NDEBUG static int is_mdelem_static(grpc_mdelem e) { return reinterpret_cast(GRPC_MDELEM_DATA(e)) >= - &grpc_static_mdelem_table[0] && + &grpc_static_mdelem_table()[0] && reinterpret_cast(GRPC_MDELEM_DATA(e)) < - &grpc_static_mdelem_table[GRPC_STATIC_MDELEM_COUNT]; + &grpc_static_mdelem_table()[GRPC_STATIC_MDELEM_COUNT]; } #endif @@ -569,7 +569,7 @@ void* grpc_mdelem_get_user_data(grpc_mdelem md, void (*destroy_func)(void*)) { grpc_static_mdelem_user_data [reinterpret_cast( GRPC_MDELEM_DATA(md)) - - grpc_static_mdelem_table]); + grpc_static_mdelem_table()]); case GRPC_MDELEM_STORAGE_ALLOCATED: { auto* am = reinterpret_cast(GRPC_MDELEM_DATA(md)); return get_user_data(am->user_data(), destroy_func); @@ -611,7 +611,7 @@ void* grpc_mdelem_set_user_data(grpc_mdelem md, void (*destroy_func)(void*), grpc_static_mdelem_user_data [reinterpret_cast( GRPC_MDELEM_DATA(md)) - - grpc_static_mdelem_table]); + grpc_static_mdelem_table()]); case GRPC_MDELEM_STORAGE_ALLOCATED: { auto* am = reinterpret_cast(GRPC_MDELEM_DATA(md)); return set_user_data(am->user_data(), destroy_func, data); diff --git a/src/core/lib/transport/static_metadata.cc b/src/core/lib/transport/static_metadata.cc index e2e618726f1..e43c17f1ca5 100644 --- a/src/core/lib/transport/static_metadata.cc +++ b/src/core/lib/transport/static_metadata.cc @@ -30,7 +30,7 @@ #include "src/core/lib/slice/slice_internal.h" -static uint8_t g_bytes[] = { +static constexpr uint8_t g_bytes[] = { 58, 112, 97, 116, 104, 58, 109, 101, 116, 104, 111, 100, 58, 115, 116, 97, 116, 117, 115, 58, 97, 117, 116, 104, 111, 114, 105, 116, 121, 58, 115, 99, 104, 101, 109, 101, 116, 101, 103, 114, 112, 99, 45, 109, 101, @@ -125,774 +125,1055 @@ static uint8_t g_bytes[] = { 112}; grpc_slice_refcount grpc_core::StaticSliceRefcount::kStaticSubRefcount; -grpc_core::StaticSliceRefcount - grpc_static_metadata_refcounts[GRPC_STATIC_MDSTR_COUNT] = { - grpc_core::StaticSliceRefcount(0), - grpc_core::StaticSliceRefcount(1), - grpc_core::StaticSliceRefcount(2), - grpc_core::StaticSliceRefcount(3), - grpc_core::StaticSliceRefcount(4), - grpc_core::StaticSliceRefcount(5), - grpc_core::StaticSliceRefcount(6), - grpc_core::StaticSliceRefcount(7), - grpc_core::StaticSliceRefcount(8), - grpc_core::StaticSliceRefcount(9), - grpc_core::StaticSliceRefcount(10), - grpc_core::StaticSliceRefcount(11), - grpc_core::StaticSliceRefcount(12), - grpc_core::StaticSliceRefcount(13), - grpc_core::StaticSliceRefcount(14), - grpc_core::StaticSliceRefcount(15), - grpc_core::StaticSliceRefcount(16), - grpc_core::StaticSliceRefcount(17), - grpc_core::StaticSliceRefcount(18), - grpc_core::StaticSliceRefcount(19), - grpc_core::StaticSliceRefcount(20), - grpc_core::StaticSliceRefcount(21), - grpc_core::StaticSliceRefcount(22), - grpc_core::StaticSliceRefcount(23), - grpc_core::StaticSliceRefcount(24), - grpc_core::StaticSliceRefcount(25), - grpc_core::StaticSliceRefcount(26), - grpc_core::StaticSliceRefcount(27), - grpc_core::StaticSliceRefcount(28), - grpc_core::StaticSliceRefcount(29), - grpc_core::StaticSliceRefcount(30), - grpc_core::StaticSliceRefcount(31), - grpc_core::StaticSliceRefcount(32), - grpc_core::StaticSliceRefcount(33), - grpc_core::StaticSliceRefcount(34), - grpc_core::StaticSliceRefcount(35), - grpc_core::StaticSliceRefcount(36), - grpc_core::StaticSliceRefcount(37), - grpc_core::StaticSliceRefcount(38), - grpc_core::StaticSliceRefcount(39), - grpc_core::StaticSliceRefcount(40), - grpc_core::StaticSliceRefcount(41), - grpc_core::StaticSliceRefcount(42), - grpc_core::StaticSliceRefcount(43), - grpc_core::StaticSliceRefcount(44), - grpc_core::StaticSliceRefcount(45), - grpc_core::StaticSliceRefcount(46), - grpc_core::StaticSliceRefcount(47), - grpc_core::StaticSliceRefcount(48), - grpc_core::StaticSliceRefcount(49), - grpc_core::StaticSliceRefcount(50), - grpc_core::StaticSliceRefcount(51), - grpc_core::StaticSliceRefcount(52), - grpc_core::StaticSliceRefcount(53), - grpc_core::StaticSliceRefcount(54), - grpc_core::StaticSliceRefcount(55), - grpc_core::StaticSliceRefcount(56), - grpc_core::StaticSliceRefcount(57), - grpc_core::StaticSliceRefcount(58), - grpc_core::StaticSliceRefcount(59), - grpc_core::StaticSliceRefcount(60), - grpc_core::StaticSliceRefcount(61), - grpc_core::StaticSliceRefcount(62), - grpc_core::StaticSliceRefcount(63), - grpc_core::StaticSliceRefcount(64), - grpc_core::StaticSliceRefcount(65), - grpc_core::StaticSliceRefcount(66), - grpc_core::StaticSliceRefcount(67), - grpc_core::StaticSliceRefcount(68), - grpc_core::StaticSliceRefcount(69), - grpc_core::StaticSliceRefcount(70), - grpc_core::StaticSliceRefcount(71), - grpc_core::StaticSliceRefcount(72), - grpc_core::StaticSliceRefcount(73), - grpc_core::StaticSliceRefcount(74), - grpc_core::StaticSliceRefcount(75), - grpc_core::StaticSliceRefcount(76), - grpc_core::StaticSliceRefcount(77), - grpc_core::StaticSliceRefcount(78), - grpc_core::StaticSliceRefcount(79), - grpc_core::StaticSliceRefcount(80), - grpc_core::StaticSliceRefcount(81), - grpc_core::StaticSliceRefcount(82), - grpc_core::StaticSliceRefcount(83), - grpc_core::StaticSliceRefcount(84), - grpc_core::StaticSliceRefcount(85), - grpc_core::StaticSliceRefcount(86), - grpc_core::StaticSliceRefcount(87), - grpc_core::StaticSliceRefcount(88), - grpc_core::StaticSliceRefcount(89), - grpc_core::StaticSliceRefcount(90), - grpc_core::StaticSliceRefcount(91), - grpc_core::StaticSliceRefcount(92), - grpc_core::StaticSliceRefcount(93), - grpc_core::StaticSliceRefcount(94), - grpc_core::StaticSliceRefcount(95), - grpc_core::StaticSliceRefcount(96), - grpc_core::StaticSliceRefcount(97), - grpc_core::StaticSliceRefcount(98), - grpc_core::StaticSliceRefcount(99), - grpc_core::StaticSliceRefcount(100), - grpc_core::StaticSliceRefcount(101), - grpc_core::StaticSliceRefcount(102), - grpc_core::StaticSliceRefcount(103), - grpc_core::StaticSliceRefcount(104), - grpc_core::StaticSliceRefcount(105), - grpc_core::StaticSliceRefcount(106), - grpc_core::StaticSliceRefcount(107), -}; -const grpc_core::StaticMetadataSlice - grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT] = { - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[0].base, - 5, g_bytes + 0), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[1].base, - 7, g_bytes + 5), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[2].base, - 7, g_bytes + 12), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[3].base, - 10, g_bytes + 19), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[4].base, - 7, g_bytes + 29), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[5].base, - 2, g_bytes + 36), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[6].base, - 12, g_bytes + 38), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[7].base, - 11, g_bytes + 50), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[8].base, - 16, g_bytes + 61), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[9].base, - 13, g_bytes + 77), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[10].base, - 20, g_bytes + 90), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[11].base, - 21, g_bytes + 110), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[12].base, - 13, g_bytes + 131), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[13].base, - 14, g_bytes + 144), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[14].base, - 12, g_bytes + 158), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[15].base, - 16, g_bytes + 170), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[16].base, - 15, g_bytes + 186), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[17].base, - 30, g_bytes + 201), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[18].base, - 37, g_bytes + 231), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[19].base, - 10, g_bytes + 268), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[20].base, - 4, g_bytes + 278), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[21].base, - 26, g_bytes + 282), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[22].base, - 22, g_bytes + 308), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[23].base, - 12, g_bytes + 330), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[24].base, - 1, g_bytes + 342), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[25].base, - 1, g_bytes + 343), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[26].base, - 1, g_bytes + 344), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[27].base, - 1, g_bytes + 345), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[29].base, - 19, g_bytes + 346), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[30].base, - 12, g_bytes + 365), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[31].base, - 30, g_bytes + 377), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[32].base, - 31, g_bytes + 407), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[33].base, - 36, g_bytes + 438), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[34].base, - 65, g_bytes + 474), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[35].base, - 54, g_bytes + 539), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[36].base, - 28, g_bytes + 593), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[37].base, - 80, g_bytes + 621), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[38].base, - 7, g_bytes + 701), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[39].base, - 4, g_bytes + 708), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[40].base, - 11, g_bytes + 712), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[41].base, - 3, g_bytes + 723), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[42].base, - 4, g_bytes + 726), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[43].base, - 1, g_bytes + 730), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[44].base, - 11, g_bytes + 731), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[45].base, - 4, g_bytes + 742), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[46].base, - 5, g_bytes + 746), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[47].base, - 3, g_bytes + 751), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[48].base, - 3, g_bytes + 754), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[49].base, - 3, g_bytes + 757), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[50].base, - 3, g_bytes + 760), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[51].base, - 3, g_bytes + 763), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[52].base, - 3, g_bytes + 766), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[53].base, - 3, g_bytes + 769), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[54].base, - 14, g_bytes + 772), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[55].base, - 13, g_bytes + 786), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[56].base, - 15, g_bytes + 799), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[57].base, - 13, g_bytes + 814), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[58].base, - 6, g_bytes + 827), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[59].base, - 27, g_bytes + 833), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[60].base, - 3, g_bytes + 860), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[61].base, - 5, g_bytes + 863), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[62].base, - 13, g_bytes + 868), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[63].base, - 13, g_bytes + 881), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[64].base, - 19, g_bytes + 894), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[65].base, - 16, g_bytes + 913), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[66].base, - 14, g_bytes + 929), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[67].base, - 16, g_bytes + 943), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[68].base, - 13, g_bytes + 959), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[69].base, - 6, g_bytes + 972), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[70].base, - 4, g_bytes + 978), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[71].base, - 4, g_bytes + 982), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[72].base, - 6, g_bytes + 986), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[73].base, - 7, g_bytes + 992), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[74].base, - 4, g_bytes + 999), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[75].base, - 8, g_bytes + 1003), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[76].base, - 17, g_bytes + 1011), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[77].base, - 13, g_bytes + 1028), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[78].base, - 8, g_bytes + 1041), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[79].base, - 19, g_bytes + 1049), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[80].base, - 13, g_bytes + 1068), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[81].base, - 4, g_bytes + 1081), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[82].base, - 8, g_bytes + 1085), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[83].base, - 12, g_bytes + 1093), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[84].base, - 18, g_bytes + 1105), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[85].base, - 19, g_bytes + 1123), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[86].base, - 5, g_bytes + 1142), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[87].base, - 7, g_bytes + 1147), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[88].base, - 7, g_bytes + 1154), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[89].base, - 11, g_bytes + 1161), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[90].base, - 6, g_bytes + 1172), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[91].base, - 10, g_bytes + 1178), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[92].base, - 25, g_bytes + 1188), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[93].base, - 17, g_bytes + 1213), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[94].base, - 4, g_bytes + 1230), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[95].base, - 3, g_bytes + 1234), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[96].base, - 16, g_bytes + 1237), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[97].base, - 1, g_bytes + 1253), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[98].base, - 8, g_bytes + 1254), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[99].base, - 8, g_bytes + 1262), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[100].base, 16, g_bytes + 1270), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[101].base, 4, g_bytes + 1286), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[102].base, 3, g_bytes + 1290), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[103].base, 11, g_bytes + 1293), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[104].base, 16, g_bytes + 1304), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[105].base, 13, g_bytes + 1320), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[106].base, 12, g_bytes + 1333), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[107].base, 21, g_bytes + 1345), -}; +namespace grpc_core { +struct StaticMetadataCtx { +#ifndef NDEBUG + const uint64_t init_canary = kGrpcStaticMetadataInitCanary; +#endif + StaticSliceRefcount refcounts[GRPC_STATIC_MDSTR_COUNT] = { + + StaticSliceRefcount(0), StaticSliceRefcount(1), + StaticSliceRefcount(2), StaticSliceRefcount(3), + StaticSliceRefcount(4), StaticSliceRefcount(5), + StaticSliceRefcount(6), StaticSliceRefcount(7), + StaticSliceRefcount(8), StaticSliceRefcount(9), + StaticSliceRefcount(10), StaticSliceRefcount(11), + StaticSliceRefcount(12), StaticSliceRefcount(13), + StaticSliceRefcount(14), StaticSliceRefcount(15), + StaticSliceRefcount(16), StaticSliceRefcount(17), + StaticSliceRefcount(18), StaticSliceRefcount(19), + StaticSliceRefcount(20), StaticSliceRefcount(21), + StaticSliceRefcount(22), StaticSliceRefcount(23), + StaticSliceRefcount(24), StaticSliceRefcount(25), + StaticSliceRefcount(26), StaticSliceRefcount(27), + StaticSliceRefcount(28), StaticSliceRefcount(29), + StaticSliceRefcount(30), StaticSliceRefcount(31), + StaticSliceRefcount(32), StaticSliceRefcount(33), + StaticSliceRefcount(34), StaticSliceRefcount(35), + StaticSliceRefcount(36), StaticSliceRefcount(37), + StaticSliceRefcount(38), StaticSliceRefcount(39), + StaticSliceRefcount(40), StaticSliceRefcount(41), + StaticSliceRefcount(42), StaticSliceRefcount(43), + StaticSliceRefcount(44), StaticSliceRefcount(45), + StaticSliceRefcount(46), StaticSliceRefcount(47), + StaticSliceRefcount(48), StaticSliceRefcount(49), + StaticSliceRefcount(50), StaticSliceRefcount(51), + StaticSliceRefcount(52), StaticSliceRefcount(53), + StaticSliceRefcount(54), StaticSliceRefcount(55), + StaticSliceRefcount(56), StaticSliceRefcount(57), + StaticSliceRefcount(58), StaticSliceRefcount(59), + StaticSliceRefcount(60), StaticSliceRefcount(61), + StaticSliceRefcount(62), StaticSliceRefcount(63), + StaticSliceRefcount(64), StaticSliceRefcount(65), + StaticSliceRefcount(66), StaticSliceRefcount(67), + StaticSliceRefcount(68), StaticSliceRefcount(69), + StaticSliceRefcount(70), StaticSliceRefcount(71), + StaticSliceRefcount(72), StaticSliceRefcount(73), + StaticSliceRefcount(74), StaticSliceRefcount(75), + StaticSliceRefcount(76), StaticSliceRefcount(77), + StaticSliceRefcount(78), StaticSliceRefcount(79), + StaticSliceRefcount(80), StaticSliceRefcount(81), + StaticSliceRefcount(82), StaticSliceRefcount(83), + StaticSliceRefcount(84), StaticSliceRefcount(85), + StaticSliceRefcount(86), StaticSliceRefcount(87), + StaticSliceRefcount(88), StaticSliceRefcount(89), + StaticSliceRefcount(90), StaticSliceRefcount(91), + StaticSliceRefcount(92), StaticSliceRefcount(93), + StaticSliceRefcount(94), StaticSliceRefcount(95), + StaticSliceRefcount(96), StaticSliceRefcount(97), + StaticSliceRefcount(98), StaticSliceRefcount(99), + StaticSliceRefcount(100), StaticSliceRefcount(101), + StaticSliceRefcount(102), StaticSliceRefcount(103), + StaticSliceRefcount(104), StaticSliceRefcount(105), + StaticSliceRefcount(106), StaticSliceRefcount(107), + }; + + const StaticMetadataSlice slices[GRPC_STATIC_MDSTR_COUNT] = { -/* Warning: the core static metadata currently operates under the soft -constraint that the first GRPC_CHTTP2_LAST_STATIC_ENTRY (61) entries must -contain metadata specified by the http2 hpack standard. The CHTTP2 transport -reads the core metadata with this assumption in mind. If the order of the core -static metadata is to be changed, then the CHTTP2 transport must be changed as -well to stop relying on the core metadata. */ + grpc_core::StaticMetadataSlice(&refcounts[0].base, 5, g_bytes + 0), + grpc_core::StaticMetadataSlice(&refcounts[1].base, 7, g_bytes + 5), + grpc_core::StaticMetadataSlice(&refcounts[2].base, 7, g_bytes + 12), + grpc_core::StaticMetadataSlice(&refcounts[3].base, 10, g_bytes + 19), + grpc_core::StaticMetadataSlice(&refcounts[4].base, 7, g_bytes + 29), + grpc_core::StaticMetadataSlice(&refcounts[5].base, 2, g_bytes + 36), + grpc_core::StaticMetadataSlice(&refcounts[6].base, 12, g_bytes + 38), + grpc_core::StaticMetadataSlice(&refcounts[7].base, 11, g_bytes + 50), + grpc_core::StaticMetadataSlice(&refcounts[8].base, 16, g_bytes + 61), + grpc_core::StaticMetadataSlice(&refcounts[9].base, 13, g_bytes + 77), + grpc_core::StaticMetadataSlice(&refcounts[10].base, 20, g_bytes + 90), + grpc_core::StaticMetadataSlice(&refcounts[11].base, 21, g_bytes + 110), + grpc_core::StaticMetadataSlice(&refcounts[12].base, 13, g_bytes + 131), + grpc_core::StaticMetadataSlice(&refcounts[13].base, 14, g_bytes + 144), + grpc_core::StaticMetadataSlice(&refcounts[14].base, 12, g_bytes + 158), + grpc_core::StaticMetadataSlice(&refcounts[15].base, 16, g_bytes + 170), + grpc_core::StaticMetadataSlice(&refcounts[16].base, 15, g_bytes + 186), + grpc_core::StaticMetadataSlice(&refcounts[17].base, 30, g_bytes + 201), + grpc_core::StaticMetadataSlice(&refcounts[18].base, 37, g_bytes + 231), + grpc_core::StaticMetadataSlice(&refcounts[19].base, 10, g_bytes + 268), + grpc_core::StaticMetadataSlice(&refcounts[20].base, 4, g_bytes + 278), + grpc_core::StaticMetadataSlice(&refcounts[21].base, 26, g_bytes + 282), + grpc_core::StaticMetadataSlice(&refcounts[22].base, 22, g_bytes + 308), + grpc_core::StaticMetadataSlice(&refcounts[23].base, 12, g_bytes + 330), + grpc_core::StaticMetadataSlice(&refcounts[24].base, 1, g_bytes + 342), + grpc_core::StaticMetadataSlice(&refcounts[25].base, 1, g_bytes + 343), + grpc_core::StaticMetadataSlice(&refcounts[26].base, 1, g_bytes + 344), + grpc_core::StaticMetadataSlice(&refcounts[27].base, 1, g_bytes + 345), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + grpc_core::StaticMetadataSlice(&refcounts[29].base, 19, g_bytes + 346), + grpc_core::StaticMetadataSlice(&refcounts[30].base, 12, g_bytes + 365), + grpc_core::StaticMetadataSlice(&refcounts[31].base, 30, g_bytes + 377), + grpc_core::StaticMetadataSlice(&refcounts[32].base, 31, g_bytes + 407), + grpc_core::StaticMetadataSlice(&refcounts[33].base, 36, g_bytes + 438), + grpc_core::StaticMetadataSlice(&refcounts[34].base, 65, g_bytes + 474), + grpc_core::StaticMetadataSlice(&refcounts[35].base, 54, g_bytes + 539), + grpc_core::StaticMetadataSlice(&refcounts[36].base, 28, g_bytes + 593), + grpc_core::StaticMetadataSlice(&refcounts[37].base, 80, g_bytes + 621), + grpc_core::StaticMetadataSlice(&refcounts[38].base, 7, g_bytes + 701), + grpc_core::StaticMetadataSlice(&refcounts[39].base, 4, g_bytes + 708), + grpc_core::StaticMetadataSlice(&refcounts[40].base, 11, g_bytes + 712), + grpc_core::StaticMetadataSlice(&refcounts[41].base, 3, g_bytes + 723), + grpc_core::StaticMetadataSlice(&refcounts[42].base, 4, g_bytes + 726), + grpc_core::StaticMetadataSlice(&refcounts[43].base, 1, g_bytes + 730), + grpc_core::StaticMetadataSlice(&refcounts[44].base, 11, g_bytes + 731), + grpc_core::StaticMetadataSlice(&refcounts[45].base, 4, g_bytes + 742), + grpc_core::StaticMetadataSlice(&refcounts[46].base, 5, g_bytes + 746), + grpc_core::StaticMetadataSlice(&refcounts[47].base, 3, g_bytes + 751), + grpc_core::StaticMetadataSlice(&refcounts[48].base, 3, g_bytes + 754), + grpc_core::StaticMetadataSlice(&refcounts[49].base, 3, g_bytes + 757), + grpc_core::StaticMetadataSlice(&refcounts[50].base, 3, g_bytes + 760), + grpc_core::StaticMetadataSlice(&refcounts[51].base, 3, g_bytes + 763), + grpc_core::StaticMetadataSlice(&refcounts[52].base, 3, g_bytes + 766), + grpc_core::StaticMetadataSlice(&refcounts[53].base, 3, g_bytes + 769), + grpc_core::StaticMetadataSlice(&refcounts[54].base, 14, g_bytes + 772), + grpc_core::StaticMetadataSlice(&refcounts[55].base, 13, g_bytes + 786), + grpc_core::StaticMetadataSlice(&refcounts[56].base, 15, g_bytes + 799), + grpc_core::StaticMetadataSlice(&refcounts[57].base, 13, g_bytes + 814), + grpc_core::StaticMetadataSlice(&refcounts[58].base, 6, g_bytes + 827), + grpc_core::StaticMetadataSlice(&refcounts[59].base, 27, g_bytes + 833), + grpc_core::StaticMetadataSlice(&refcounts[60].base, 3, g_bytes + 860), + grpc_core::StaticMetadataSlice(&refcounts[61].base, 5, g_bytes + 863), + grpc_core::StaticMetadataSlice(&refcounts[62].base, 13, g_bytes + 868), + grpc_core::StaticMetadataSlice(&refcounts[63].base, 13, g_bytes + 881), + grpc_core::StaticMetadataSlice(&refcounts[64].base, 19, g_bytes + 894), + grpc_core::StaticMetadataSlice(&refcounts[65].base, 16, g_bytes + 913), + grpc_core::StaticMetadataSlice(&refcounts[66].base, 14, g_bytes + 929), + grpc_core::StaticMetadataSlice(&refcounts[67].base, 16, g_bytes + 943), + grpc_core::StaticMetadataSlice(&refcounts[68].base, 13, g_bytes + 959), + grpc_core::StaticMetadataSlice(&refcounts[69].base, 6, g_bytes + 972), + grpc_core::StaticMetadataSlice(&refcounts[70].base, 4, g_bytes + 978), + grpc_core::StaticMetadataSlice(&refcounts[71].base, 4, g_bytes + 982), + grpc_core::StaticMetadataSlice(&refcounts[72].base, 6, g_bytes + 986), + grpc_core::StaticMetadataSlice(&refcounts[73].base, 7, g_bytes + 992), + grpc_core::StaticMetadataSlice(&refcounts[74].base, 4, g_bytes + 999), + grpc_core::StaticMetadataSlice(&refcounts[75].base, 8, g_bytes + 1003), + grpc_core::StaticMetadataSlice(&refcounts[76].base, 17, g_bytes + 1011), + grpc_core::StaticMetadataSlice(&refcounts[77].base, 13, g_bytes + 1028), + grpc_core::StaticMetadataSlice(&refcounts[78].base, 8, g_bytes + 1041), + grpc_core::StaticMetadataSlice(&refcounts[79].base, 19, g_bytes + 1049), + grpc_core::StaticMetadataSlice(&refcounts[80].base, 13, g_bytes + 1068), + grpc_core::StaticMetadataSlice(&refcounts[81].base, 4, g_bytes + 1081), + grpc_core::StaticMetadataSlice(&refcounts[82].base, 8, g_bytes + 1085), + grpc_core::StaticMetadataSlice(&refcounts[83].base, 12, g_bytes + 1093), + grpc_core::StaticMetadataSlice(&refcounts[84].base, 18, g_bytes + 1105), + grpc_core::StaticMetadataSlice(&refcounts[85].base, 19, g_bytes + 1123), + grpc_core::StaticMetadataSlice(&refcounts[86].base, 5, g_bytes + 1142), + grpc_core::StaticMetadataSlice(&refcounts[87].base, 7, g_bytes + 1147), + grpc_core::StaticMetadataSlice(&refcounts[88].base, 7, g_bytes + 1154), + grpc_core::StaticMetadataSlice(&refcounts[89].base, 11, g_bytes + 1161), + grpc_core::StaticMetadataSlice(&refcounts[90].base, 6, g_bytes + 1172), + grpc_core::StaticMetadataSlice(&refcounts[91].base, 10, g_bytes + 1178), + grpc_core::StaticMetadataSlice(&refcounts[92].base, 25, g_bytes + 1188), + grpc_core::StaticMetadataSlice(&refcounts[93].base, 17, g_bytes + 1213), + grpc_core::StaticMetadataSlice(&refcounts[94].base, 4, g_bytes + 1230), + grpc_core::StaticMetadataSlice(&refcounts[95].base, 3, g_bytes + 1234), + grpc_core::StaticMetadataSlice(&refcounts[96].base, 16, g_bytes + 1237), + grpc_core::StaticMetadataSlice(&refcounts[97].base, 1, g_bytes + 1253), + grpc_core::StaticMetadataSlice(&refcounts[98].base, 8, g_bytes + 1254), + grpc_core::StaticMetadataSlice(&refcounts[99].base, 8, g_bytes + 1262), + grpc_core::StaticMetadataSlice(&refcounts[100].base, 16, g_bytes + 1270), + grpc_core::StaticMetadataSlice(&refcounts[101].base, 4, g_bytes + 1286), + grpc_core::StaticMetadataSlice(&refcounts[102].base, 3, g_bytes + 1290), + grpc_core::StaticMetadataSlice(&refcounts[103].base, 11, g_bytes + 1293), + grpc_core::StaticMetadataSlice(&refcounts[104].base, 16, g_bytes + 1304), + grpc_core::StaticMetadataSlice(&refcounts[105].base, 13, g_bytes + 1320), + grpc_core::StaticMetadataSlice(&refcounts[106].base, 12, g_bytes + 1333), + grpc_core::StaticMetadataSlice(&refcounts[107].base, 21, g_bytes + 1345), + }; + StaticMetadata static_mdelem_table[GRPC_STATIC_MDELEM_COUNT] = { + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[3].base, 10, g_bytes + 19), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 0), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[1].base, 7, g_bytes + 5), + grpc_core::StaticMetadataSlice(&refcounts[41].base, 3, g_bytes + 723), + 1), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[1].base, 7, g_bytes + 5), + grpc_core::StaticMetadataSlice(&refcounts[42].base, 4, g_bytes + 726), + 2), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[0].base, 5, g_bytes + 0), + grpc_core::StaticMetadataSlice(&refcounts[43].base, 1, g_bytes + 730), + 3), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[0].base, 5, g_bytes + 0), + grpc_core::StaticMetadataSlice(&refcounts[44].base, 11, + g_bytes + 731), + 4), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[4].base, 7, g_bytes + 29), + grpc_core::StaticMetadataSlice(&refcounts[45].base, 4, g_bytes + 742), + 5), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[4].base, 7, g_bytes + 29), + grpc_core::StaticMetadataSlice(&refcounts[46].base, 5, g_bytes + 746), + 6), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[2].base, 7, g_bytes + 12), + grpc_core::StaticMetadataSlice(&refcounts[47].base, 3, g_bytes + 751), + 7), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[2].base, 7, g_bytes + 12), + grpc_core::StaticMetadataSlice(&refcounts[48].base, 3, g_bytes + 754), + 8), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[2].base, 7, g_bytes + 12), + grpc_core::StaticMetadataSlice(&refcounts[49].base, 3, g_bytes + 757), + 9), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[2].base, 7, g_bytes + 12), + grpc_core::StaticMetadataSlice(&refcounts[50].base, 3, g_bytes + 760), + 10), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[2].base, 7, g_bytes + 12), + grpc_core::StaticMetadataSlice(&refcounts[51].base, 3, g_bytes + 763), + 11), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[2].base, 7, g_bytes + 12), + grpc_core::StaticMetadataSlice(&refcounts[52].base, 3, g_bytes + 766), + 12), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[2].base, 7, g_bytes + 12), + grpc_core::StaticMetadataSlice(&refcounts[53].base, 3, g_bytes + 769), + 13), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[54].base, 14, + g_bytes + 772), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 14), + StaticMetadata(grpc_core::StaticMetadataSlice(&refcounts[16].base, 15, + g_bytes + 186), + grpc_core::StaticMetadataSlice(&refcounts[55].base, 13, + g_bytes + 786), + 15), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[56].base, 15, + g_bytes + 799), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 16), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[57].base, 13, + g_bytes + 814), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 17), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[58].base, 6, g_bytes + 827), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 18), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[59].base, 27, + g_bytes + 833), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 19), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[60].base, 3, g_bytes + 860), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 20), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[61].base, 5, g_bytes + 863), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 21), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[62].base, 13, + g_bytes + 868), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 22), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[63].base, 13, + g_bytes + 881), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 23), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[64].base, 19, + g_bytes + 894), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 24), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[15].base, 16, + g_bytes + 170), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 25), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[65].base, 16, + g_bytes + 913), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 26), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[66].base, 14, + g_bytes + 929), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 27), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[67].base, 16, + g_bytes + 943), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 28), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[68].base, 13, + g_bytes + 959), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 29), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[14].base, 12, + g_bytes + 158), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 30), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[69].base, 6, g_bytes + 972), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 31), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[70].base, 4, g_bytes + 978), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 32), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[71].base, 4, g_bytes + 982), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 33), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[72].base, 6, g_bytes + 986), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 34), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[73].base, 7, g_bytes + 992), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 35), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[74].base, 4, g_bytes + 999), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 36), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[20].base, 4, g_bytes + 278), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 37), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[75].base, 8, + g_bytes + 1003), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 38), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[76].base, 17, + g_bytes + 1011), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 39), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[77].base, 13, + g_bytes + 1028), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 40), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[78].base, 8, + g_bytes + 1041), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 41), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[79].base, 19, + g_bytes + 1049), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 42), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[80].base, 13, + g_bytes + 1068), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 43), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[81].base, 4, + g_bytes + 1081), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 44), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[82].base, 8, + g_bytes + 1085), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 45), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[83].base, 12, + g_bytes + 1093), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 46), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[84].base, 18, + g_bytes + 1105), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 47), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[85].base, 19, + g_bytes + 1123), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 48), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[86].base, 5, + g_bytes + 1142), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 49), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[87].base, 7, + g_bytes + 1147), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 50), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[88].base, 7, + g_bytes + 1154), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 51), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[89].base, 11, + g_bytes + 1161), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 52), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[90].base, 6, + g_bytes + 1172), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 53), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[91].base, 10, + g_bytes + 1178), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 54), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[92].base, 25, + g_bytes + 1188), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 55), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[93].base, 17, + g_bytes + 1213), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 56), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[19].base, 10, + g_bytes + 268), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 57), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[94].base, 4, + g_bytes + 1230), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 58), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[95].base, 3, + g_bytes + 1234), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 59), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[96].base, 16, + g_bytes + 1237), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 60), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[7].base, 11, g_bytes + 50), + grpc_core::StaticMetadataSlice(&refcounts[97].base, 1, + g_bytes + 1253), + 61), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[7].base, 11, g_bytes + 50), + grpc_core::StaticMetadataSlice(&refcounts[24].base, 1, g_bytes + 342), + 62), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[7].base, 11, g_bytes + 50), + grpc_core::StaticMetadataSlice(&refcounts[25].base, 1, g_bytes + 343), + 63), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[9].base, 13, g_bytes + 77), + grpc_core::StaticMetadataSlice(&refcounts[98].base, 8, + g_bytes + 1254), + 64), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[9].base, 13, g_bytes + 77), + grpc_core::StaticMetadataSlice(&refcounts[39].base, 4, g_bytes + 708), + 65), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[9].base, 13, g_bytes + 77), + grpc_core::StaticMetadataSlice(&refcounts[38].base, 7, g_bytes + 701), + 66), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[5].base, 2, g_bytes + 36), + grpc_core::StaticMetadataSlice(&refcounts[99].base, 8, + g_bytes + 1262), + 67), + StaticMetadata(grpc_core::StaticMetadataSlice(&refcounts[14].base, 12, + g_bytes + 158), + grpc_core::StaticMetadataSlice(&refcounts[100].base, 16, + g_bytes + 1270), + 68), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[4].base, 7, g_bytes + 29), + grpc_core::StaticMetadataSlice(&refcounts[101].base, 4, + g_bytes + 1286), + 69), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[1].base, 7, g_bytes + 5), + grpc_core::StaticMetadataSlice(&refcounts[102].base, 3, + g_bytes + 1290), + 70), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[16].base, 15, + g_bytes + 186), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 71), + StaticMetadata(grpc_core::StaticMetadataSlice(&refcounts[15].base, 16, + g_bytes + 170), + grpc_core::StaticMetadataSlice(&refcounts[98].base, 8, + g_bytes + 1254), + 72), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[15].base, 16, + g_bytes + 170), + grpc_core::StaticMetadataSlice(&refcounts[39].base, 4, g_bytes + 708), + 73), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[103].base, 11, + g_bytes + 1293), + grpc_core::StaticMetadataSlice(&refcounts[28].base, 0, g_bytes + 346), + 74), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[10].base, 20, g_bytes + 90), + grpc_core::StaticMetadataSlice(&refcounts[98].base, 8, + g_bytes + 1254), + 75), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[10].base, 20, g_bytes + 90), + grpc_core::StaticMetadataSlice(&refcounts[38].base, 7, g_bytes + 701), + 76), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[10].base, 20, g_bytes + 90), + grpc_core::StaticMetadataSlice(&refcounts[104].base, 16, + g_bytes + 1304), + 77), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[10].base, 20, g_bytes + 90), + grpc_core::StaticMetadataSlice(&refcounts[39].base, 4, g_bytes + 708), + 78), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[10].base, 20, g_bytes + 90), + grpc_core::StaticMetadataSlice(&refcounts[105].base, 13, + g_bytes + 1320), + 79), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[10].base, 20, g_bytes + 90), + grpc_core::StaticMetadataSlice(&refcounts[106].base, 12, + g_bytes + 1333), + 80), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[10].base, 20, g_bytes + 90), + grpc_core::StaticMetadataSlice(&refcounts[107].base, 21, + g_bytes + 1345), + 81), + StaticMetadata(grpc_core::StaticMetadataSlice(&refcounts[16].base, 15, + g_bytes + 186), + grpc_core::StaticMetadataSlice(&refcounts[98].base, 8, + g_bytes + 1254), + 82), + StaticMetadata( + grpc_core::StaticMetadataSlice(&refcounts[16].base, 15, + g_bytes + 186), + grpc_core::StaticMetadataSlice(&refcounts[39].base, 4, g_bytes + 708), + 83), + StaticMetadata(grpc_core::StaticMetadataSlice(&refcounts[16].base, 15, + g_bytes + 186), + grpc_core::StaticMetadataSlice(&refcounts[105].base, 13, + g_bytes + 1320), + 84), + }; -grpc_mdelem grpc_static_mdelem_manifested[GRPC_STATIC_MDELEM_COUNT] = { - // clang-format off + /* Warning: the core static metadata currently operates under the soft + constraint that the first GRPC_CHTTP2_LAST_STATIC_ENTRY (61) entries must + contain metadata specified by the http2 hpack standard. The CHTTP2 transport + reads the core metadata with this assumption in mind. If the order of the core + static metadata is to be changed, then the CHTTP2 transport must be changed as + well to stop relying on the core metadata. */ + + grpc_mdelem static_mdelem_manifested[GRPC_STATIC_MDELEM_COUNT] = { + // clang-format off /* GRPC_MDELEM_AUTHORITY_EMPTY: ":authority": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[0].data(), + &static_mdelem_table[0].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_METHOD_GET: ":method": "GET" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[1].data(), + &static_mdelem_table[1].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_METHOD_POST: ":method": "POST" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[2].data(), + &static_mdelem_table[2].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_PATH_SLASH: ":path": "/" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[3].data(), + &static_mdelem_table[3].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_PATH_SLASH_INDEX_DOT_HTML: ":path": "/index.html" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[4].data(), + &static_mdelem_table[4].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_SCHEME_HTTP: ":scheme": "http" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[5].data(), + &static_mdelem_table[5].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_SCHEME_HTTPS: ":scheme": "https" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[6].data(), + &static_mdelem_table[6].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_STATUS_200: ":status": "200" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[7].data(), + &static_mdelem_table[7].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_STATUS_204: ":status": "204" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[8].data(), + &static_mdelem_table[8].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_STATUS_206: ":status": "206" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[9].data(), + &static_mdelem_table[9].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_STATUS_304: ":status": "304" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[10].data(), + &static_mdelem_table[10].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_STATUS_400: ":status": "400" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[11].data(), + &static_mdelem_table[11].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_STATUS_404: ":status": "404" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[12].data(), + &static_mdelem_table[12].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_STATUS_500: ":status": "500" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[13].data(), + &static_mdelem_table[13].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ACCEPT_CHARSET_EMPTY: "accept-charset": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[14].data(), + &static_mdelem_table[14].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ACCEPT_ENCODING_GZIP_COMMA_DEFLATE: "accept-encoding": "gzip, deflate" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[15].data(), + &static_mdelem_table[15].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ACCEPT_LANGUAGE_EMPTY: "accept-language": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[16].data(), + &static_mdelem_table[16].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ACCEPT_RANGES_EMPTY: "accept-ranges": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[17].data(), + &static_mdelem_table[17].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ACCEPT_EMPTY: "accept": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[18].data(), + &static_mdelem_table[18].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ACCESS_CONTROL_ALLOW_ORIGIN_EMPTY: "access-control-allow-origin": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[19].data(), + &static_mdelem_table[19].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_AGE_EMPTY: "age": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[20].data(), + &static_mdelem_table[20].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ALLOW_EMPTY: "allow": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[21].data(), + &static_mdelem_table[21].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_AUTHORIZATION_EMPTY: "authorization": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[22].data(), + &static_mdelem_table[22].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_CACHE_CONTROL_EMPTY: "cache-control": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[23].data(), + &static_mdelem_table[23].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_CONTENT_DISPOSITION_EMPTY: "content-disposition": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[24].data(), + &static_mdelem_table[24].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_CONTENT_ENCODING_EMPTY: "content-encoding": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[25].data(), + &static_mdelem_table[25].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_CONTENT_LANGUAGE_EMPTY: "content-language": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[26].data(), + &static_mdelem_table[26].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_CONTENT_LENGTH_EMPTY: "content-length": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[27].data(), + &static_mdelem_table[27].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_CONTENT_LOCATION_EMPTY: "content-location": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[28].data(), + &static_mdelem_table[28].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_CONTENT_RANGE_EMPTY: "content-range": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[29].data(), + &static_mdelem_table[29].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_CONTENT_TYPE_EMPTY: "content-type": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[30].data(), + &static_mdelem_table[30].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_COOKIE_EMPTY: "cookie": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[31].data(), + &static_mdelem_table[31].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_DATE_EMPTY: "date": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[32].data(), + &static_mdelem_table[32].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ETAG_EMPTY: "etag": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[33].data(), + &static_mdelem_table[33].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_EXPECT_EMPTY: "expect": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[34].data(), + &static_mdelem_table[34].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_EXPIRES_EMPTY: "expires": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[35].data(), + &static_mdelem_table[35].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_FROM_EMPTY: "from": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[36].data(), + &static_mdelem_table[36].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_HOST_EMPTY: "host": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[37].data(), + &static_mdelem_table[37].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_IF_MATCH_EMPTY: "if-match": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[38].data(), + &static_mdelem_table[38].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_IF_MODIFIED_SINCE_EMPTY: "if-modified-since": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[39].data(), + &static_mdelem_table[39].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_IF_NONE_MATCH_EMPTY: "if-none-match": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[40].data(), + &static_mdelem_table[40].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_IF_RANGE_EMPTY: "if-range": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[41].data(), + &static_mdelem_table[41].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_IF_UNMODIFIED_SINCE_EMPTY: "if-unmodified-since": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[42].data(), + &static_mdelem_table[42].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_LAST_MODIFIED_EMPTY: "last-modified": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[43].data(), + &static_mdelem_table[43].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_LINK_EMPTY: "link": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[44].data(), + &static_mdelem_table[44].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_LOCATION_EMPTY: "location": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[45].data(), + &static_mdelem_table[45].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_MAX_FORWARDS_EMPTY: "max-forwards": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[46].data(), + &static_mdelem_table[46].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_PROXY_AUTHENTICATE_EMPTY: "proxy-authenticate": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[47].data(), + &static_mdelem_table[47].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_PROXY_AUTHORIZATION_EMPTY: "proxy-authorization": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[48].data(), + &static_mdelem_table[48].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_RANGE_EMPTY: "range": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[49].data(), + &static_mdelem_table[49].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_REFERER_EMPTY: "referer": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[50].data(), + &static_mdelem_table[50].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_REFRESH_EMPTY: "refresh": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[51].data(), + &static_mdelem_table[51].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_RETRY_AFTER_EMPTY: "retry-after": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[52].data(), + &static_mdelem_table[52].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_SERVER_EMPTY: "server": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[53].data(), + &static_mdelem_table[53].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_SET_COOKIE_EMPTY: "set-cookie": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[54].data(), + &static_mdelem_table[54].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_STRICT_TRANSPORT_SECURITY_EMPTY: "strict-transport-security": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[55].data(), + &static_mdelem_table[55].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_TRANSFER_ENCODING_EMPTY: "transfer-encoding": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[56].data(), + &static_mdelem_table[56].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_USER_AGENT_EMPTY: "user-agent": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[57].data(), + &static_mdelem_table[57].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_VARY_EMPTY: "vary": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[58].data(), + &static_mdelem_table[58].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_VIA_EMPTY: "via": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[59].data(), + &static_mdelem_table[59].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_WWW_AUTHENTICATE_EMPTY: "www-authenticate": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[60].data(), + &static_mdelem_table[60].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_STATUS_0: "grpc-status": "0" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[61].data(), + &static_mdelem_table[61].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_STATUS_1: "grpc-status": "1" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[62].data(), + &static_mdelem_table[62].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_STATUS_2: "grpc-status": "2" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[63].data(), + &static_mdelem_table[63].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_ENCODING_IDENTITY: "grpc-encoding": "identity" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[64].data(), + &static_mdelem_table[64].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_ENCODING_GZIP: "grpc-encoding": "gzip" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[65].data(), + &static_mdelem_table[65].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_ENCODING_DEFLATE: "grpc-encoding": "deflate" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[66].data(), + &static_mdelem_table[66].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_TE_TRAILERS: "te": "trailers" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[67].data(), + &static_mdelem_table[67].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC: "content-type": "application/grpc" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[68].data(), + &static_mdelem_table[68].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_SCHEME_GRPC: ":scheme": "grpc" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[69].data(), + &static_mdelem_table[69].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_METHOD_PUT: ":method": "PUT" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[70].data(), + &static_mdelem_table[70].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ACCEPT_ENCODING_EMPTY: "accept-encoding": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[71].data(), + &static_mdelem_table[71].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_CONTENT_ENCODING_IDENTITY: "content-encoding": "identity" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[72].data(), + &static_mdelem_table[72].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_CONTENT_ENCODING_GZIP: "content-encoding": "gzip" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[73].data(), + &static_mdelem_table[73].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_LB_COST_BIN_EMPTY: "lb-cost-bin": "" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[74].data(), + &static_mdelem_table[74].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_ACCEPT_ENCODING_IDENTITY: "grpc-accept-encoding": "identity" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[75].data(), + &static_mdelem_table[75].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_ACCEPT_ENCODING_DEFLATE: "grpc-accept-encoding": "deflate" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[76].data(), + &static_mdelem_table[76].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_ACCEPT_ENCODING_IDENTITY_COMMA_DEFLATE: "grpc-accept-encoding": "identity,deflate" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[77].data(), + &static_mdelem_table[77].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_ACCEPT_ENCODING_GZIP: "grpc-accept-encoding": "gzip" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[78].data(), + &static_mdelem_table[78].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_ACCEPT_ENCODING_IDENTITY_COMMA_GZIP: "grpc-accept-encoding": "identity,gzip" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[79].data(), + &static_mdelem_table[79].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_ACCEPT_ENCODING_DEFLATE_COMMA_GZIP: "grpc-accept-encoding": "deflate,gzip" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[80].data(), + &static_mdelem_table[80].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_GRPC_ACCEPT_ENCODING_IDENTITY_COMMA_DEFLATE_COMMA_GZIP: "grpc-accept-encoding": "identity,deflate,gzip" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[81].data(), + &static_mdelem_table[81].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ACCEPT_ENCODING_IDENTITY: "accept-encoding": "identity" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[82].data(), + &static_mdelem_table[82].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ACCEPT_ENCODING_GZIP: "accept-encoding": "gzip" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[83].data(), + &static_mdelem_table[83].data(), GRPC_MDELEM_STORAGE_STATIC), /* GRPC_MDELEM_ACCEPT_ENCODING_IDENTITY_COMMA_GZIP: "accept-encoding": "identity,gzip" */ GRPC_MAKE_MDELEM( - &grpc_static_mdelem_table[84].data(), + &static_mdelem_table[84].data(), GRPC_MDELEM_STORAGE_STATIC) - // clang-format on + // clang-format on + }; }; +} // namespace grpc_core + +namespace grpc_core { +static StaticMetadataCtx* g_static_metadata_slice_ctx = nullptr; +const StaticMetadataSlice* g_static_metadata_slice_table = nullptr; +StaticSliceRefcount* g_static_metadata_slice_refcounts = nullptr; +StaticMetadata* g_static_mdelem_table = nullptr; +grpc_mdelem* g_static_mdelem_manifested = nullptr; +#ifndef NDEBUG +uint64_t StaticMetadataInitCanary() { + return g_static_metadata_slice_ctx->init_canary; +} +#endif +} // namespace grpc_core + +void grpc_init_static_metadata_ctx(void) { + grpc_core::g_static_metadata_slice_ctx = + grpc_core::New(); + grpc_core::g_static_metadata_slice_table = + grpc_core::g_static_metadata_slice_ctx->slices; + grpc_core::g_static_metadata_slice_refcounts = + grpc_core::g_static_metadata_slice_ctx->refcounts; + grpc_core::g_static_mdelem_table = + grpc_core::g_static_metadata_slice_ctx->static_mdelem_table; + grpc_core::g_static_mdelem_manifested = + grpc_core::g_static_metadata_slice_ctx->static_mdelem_manifested; +} + +void grpc_destroy_static_metadata_ctx(void) { + grpc_core::Delete( + grpc_core::g_static_metadata_slice_ctx); + grpc_core::g_static_metadata_slice_ctx = nullptr; + grpc_core::g_static_metadata_slice_table = nullptr; + grpc_core::g_static_metadata_slice_refcounts = nullptr; + grpc_core::g_static_mdelem_table = nullptr; + grpc_core::g_static_mdelem_manifested = nullptr; +} + uintptr_t grpc_static_mdelem_user_data[GRPC_STATIC_MDELEM_COUNT] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -946,523 +1227,12 @@ grpc_mdelem grpc_static_mdelem_for_static_strings(intptr_t a, intptr_t b) { uint32_t h = elems_phash(k); return h < GPR_ARRAY_SIZE(elem_keys) && elem_keys[h] == k && elem_idxs[h] != 255 - ? GRPC_MAKE_MDELEM(&grpc_static_mdelem_table[elem_idxs[h]].data(), - GRPC_MDELEM_STORAGE_STATIC) + ? GRPC_MAKE_MDELEM( + &grpc_static_mdelem_table()[elem_idxs[h]].data(), + GRPC_MDELEM_STORAGE_STATIC) : GRPC_MDNULL; } -grpc_core::StaticMetadata grpc_static_mdelem_table[GRPC_STATIC_MDELEM_COUNT] = { - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[3].base, - 10, g_bytes + 19), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 0), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[1].base, - 7, g_bytes + 5), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[41].base, - 3, g_bytes + 723), - 1), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[1].base, - 7, g_bytes + 5), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[42].base, - 4, g_bytes + 726), - 2), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[0].base, - 5, g_bytes + 0), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[43].base, - 1, g_bytes + 730), - 3), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[0].base, - 5, g_bytes + 0), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[44].base, - 11, g_bytes + 731), - 4), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[4].base, - 7, g_bytes + 29), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[45].base, - 4, g_bytes + 742), - 5), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[4].base, - 7, g_bytes + 29), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[46].base, - 5, g_bytes + 746), - 6), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[2].base, - 7, g_bytes + 12), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[47].base, - 3, g_bytes + 751), - 7), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[2].base, - 7, g_bytes + 12), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[48].base, - 3, g_bytes + 754), - 8), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[2].base, - 7, g_bytes + 12), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[49].base, - 3, g_bytes + 757), - 9), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[2].base, - 7, g_bytes + 12), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[50].base, - 3, g_bytes + 760), - 10), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[2].base, - 7, g_bytes + 12), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[51].base, - 3, g_bytes + 763), - 11), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[2].base, - 7, g_bytes + 12), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[52].base, - 3, g_bytes + 766), - 12), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[2].base, - 7, g_bytes + 12), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[53].base, - 3, g_bytes + 769), - 13), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[54].base, - 14, g_bytes + 772), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 14), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[16].base, - 15, g_bytes + 186), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[55].base, - 13, g_bytes + 786), - 15), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[56].base, - 15, g_bytes + 799), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 16), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[57].base, - 13, g_bytes + 814), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 17), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[58].base, - 6, g_bytes + 827), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 18), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[59].base, - 27, g_bytes + 833), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 19), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[60].base, - 3, g_bytes + 860), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 20), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[61].base, - 5, g_bytes + 863), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 21), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[62].base, - 13, g_bytes + 868), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 22), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[63].base, - 13, g_bytes + 881), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 23), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[64].base, - 19, g_bytes + 894), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 24), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[15].base, - 16, g_bytes + 170), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 25), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[65].base, - 16, g_bytes + 913), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 26), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[66].base, - 14, g_bytes + 929), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 27), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[67].base, - 16, g_bytes + 943), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 28), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[68].base, - 13, g_bytes + 959), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 29), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[14].base, - 12, g_bytes + 158), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 30), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[69].base, - 6, g_bytes + 972), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 31), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[70].base, - 4, g_bytes + 978), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 32), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[71].base, - 4, g_bytes + 982), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 33), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[72].base, - 6, g_bytes + 986), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 34), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[73].base, - 7, g_bytes + 992), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 35), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[74].base, - 4, g_bytes + 999), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 36), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[20].base, - 4, g_bytes + 278), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 37), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[75].base, - 8, g_bytes + 1003), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 38), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[76].base, - 17, g_bytes + 1011), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 39), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[77].base, - 13, g_bytes + 1028), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 40), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[78].base, - 8, g_bytes + 1041), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 41), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[79].base, - 19, g_bytes + 1049), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 42), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[80].base, - 13, g_bytes + 1068), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 43), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[81].base, - 4, g_bytes + 1081), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 44), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[82].base, - 8, g_bytes + 1085), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 45), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[83].base, - 12, g_bytes + 1093), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 46), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[84].base, - 18, g_bytes + 1105), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 47), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[85].base, - 19, g_bytes + 1123), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 48), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[86].base, - 5, g_bytes + 1142), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 49), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[87].base, - 7, g_bytes + 1147), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 50), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[88].base, - 7, g_bytes + 1154), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 51), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[89].base, - 11, g_bytes + 1161), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 52), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[90].base, - 6, g_bytes + 1172), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 53), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[91].base, - 10, g_bytes + 1178), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 54), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[92].base, - 25, g_bytes + 1188), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 55), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[93].base, - 17, g_bytes + 1213), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 56), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[19].base, - 10, g_bytes + 268), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 57), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[94].base, - 4, g_bytes + 1230), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 58), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[95].base, - 3, g_bytes + 1234), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 59), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[96].base, - 16, g_bytes + 1237), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 60), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[7].base, - 11, g_bytes + 50), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[97].base, - 1, g_bytes + 1253), - 61), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[7].base, - 11, g_bytes + 50), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[24].base, - 1, g_bytes + 342), - 62), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[7].base, - 11, g_bytes + 50), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[25].base, - 1, g_bytes + 343), - 63), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[9].base, - 13, g_bytes + 77), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[98].base, - 8, g_bytes + 1254), - 64), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[9].base, - 13, g_bytes + 77), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[39].base, - 4, g_bytes + 708), - 65), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[9].base, - 13, g_bytes + 77), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[38].base, - 7, g_bytes + 701), - 66), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[5].base, - 2, g_bytes + 36), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[99].base, - 8, g_bytes + 1262), - 67), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[14].base, - 12, g_bytes + 158), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[100].base, 16, g_bytes + 1270), - 68), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[4].base, - 7, g_bytes + 29), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[101].base, 4, g_bytes + 1286), - 69), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[1].base, - 7, g_bytes + 5), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[102].base, 3, g_bytes + 1290), - 70), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[16].base, - 15, g_bytes + 186), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 71), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[15].base, - 16, g_bytes + 170), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[98].base, - 8, g_bytes + 1254), - 72), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[15].base, - 16, g_bytes + 170), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[39].base, - 4, g_bytes + 708), - 73), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[103].base, 11, g_bytes + 1293), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[28].base, - 0, g_bytes + 346), - 74), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[10].base, - 20, g_bytes + 90), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[98].base, - 8, g_bytes + 1254), - 75), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[10].base, - 20, g_bytes + 90), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[38].base, - 7, g_bytes + 701), - 76), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[10].base, - 20, g_bytes + 90), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[104].base, 16, g_bytes + 1304), - 77), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[10].base, - 20, g_bytes + 90), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[39].base, - 4, g_bytes + 708), - 78), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[10].base, - 20, g_bytes + 90), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[105].base, 13, g_bytes + 1320), - 79), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[10].base, - 20, g_bytes + 90), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[106].base, 12, g_bytes + 1333), - 80), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[10].base, - 20, g_bytes + 90), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[107].base, 21, g_bytes + 1345), - 81), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[16].base, - 15, g_bytes + 186), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[98].base, - 8, g_bytes + 1254), - 82), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[16].base, - 15, g_bytes + 186), - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[39].base, - 4, g_bytes + 708), - 83), - grpc_core::StaticMetadata( - grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[16].base, - 15, g_bytes + 186), - grpc_core::StaticMetadataSlice( - &grpc_static_metadata_refcounts[105].base, 13, g_bytes + 1320), - 84), -}; const uint8_t grpc_static_accept_encoding_metadata[8] = {0, 75, 76, 77, 78, 79, 80, 81}; diff --git a/src/core/lib/transport/static_metadata.h b/src/core/lib/transport/static_metadata.h index 7ea000e1066..c465a2f37b7 100644 --- a/src/core/lib/transport/static_metadata.h +++ b/src/core/lib/transport/static_metadata.h @@ -37,240 +37,262 @@ static_assert( std::is_trivially_destructible::value, "grpc_core::StaticMetadataSlice must be trivially destructible."); #define GRPC_STATIC_MDSTR_COUNT 108 -extern const grpc_core::StaticMetadataSlice - grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT]; + +void grpc_init_static_metadata_ctx(void); +void grpc_destroy_static_metadata_ctx(void); +namespace grpc_core { +#ifndef NDEBUG +constexpr uint64_t kGrpcStaticMetadataInitCanary = 0xCAFEF00DC0FFEE11L; +uint64_t StaticMetadataInitCanary(); +#endif +extern const StaticMetadataSlice* g_static_metadata_slice_table; +} +inline const grpc_core::StaticMetadataSlice* grpc_static_slice_table() { + GPR_DEBUG_ASSERT(grpc_core::StaticMetadataInitCanary() == + grpc_core::kGrpcStaticMetadataInitCanary); + GPR_DEBUG_ASSERT(grpc_core::g_static_metadata_slice_table != nullptr); + return grpc_core::g_static_metadata_slice_table; +} + /* ":path" */ -#define GRPC_MDSTR_PATH (grpc_static_slice_table[0]) +#define GRPC_MDSTR_PATH (grpc_static_slice_table()[0]) /* ":method" */ -#define GRPC_MDSTR_METHOD (grpc_static_slice_table[1]) +#define GRPC_MDSTR_METHOD (grpc_static_slice_table()[1]) /* ":status" */ -#define GRPC_MDSTR_STATUS (grpc_static_slice_table[2]) +#define GRPC_MDSTR_STATUS (grpc_static_slice_table()[2]) /* ":authority" */ -#define GRPC_MDSTR_AUTHORITY (grpc_static_slice_table[3]) +#define GRPC_MDSTR_AUTHORITY (grpc_static_slice_table()[3]) /* ":scheme" */ -#define GRPC_MDSTR_SCHEME (grpc_static_slice_table[4]) +#define GRPC_MDSTR_SCHEME (grpc_static_slice_table()[4]) /* "te" */ -#define GRPC_MDSTR_TE (grpc_static_slice_table[5]) +#define GRPC_MDSTR_TE (grpc_static_slice_table()[5]) /* "grpc-message" */ -#define GRPC_MDSTR_GRPC_MESSAGE (grpc_static_slice_table[6]) +#define GRPC_MDSTR_GRPC_MESSAGE (grpc_static_slice_table()[6]) /* "grpc-status" */ -#define GRPC_MDSTR_GRPC_STATUS (grpc_static_slice_table[7]) +#define GRPC_MDSTR_GRPC_STATUS (grpc_static_slice_table()[7]) /* "grpc-payload-bin" */ -#define GRPC_MDSTR_GRPC_PAYLOAD_BIN (grpc_static_slice_table[8]) +#define GRPC_MDSTR_GRPC_PAYLOAD_BIN (grpc_static_slice_table()[8]) /* "grpc-encoding" */ -#define GRPC_MDSTR_GRPC_ENCODING (grpc_static_slice_table[9]) +#define GRPC_MDSTR_GRPC_ENCODING (grpc_static_slice_table()[9]) /* "grpc-accept-encoding" */ -#define GRPC_MDSTR_GRPC_ACCEPT_ENCODING (grpc_static_slice_table[10]) +#define GRPC_MDSTR_GRPC_ACCEPT_ENCODING (grpc_static_slice_table()[10]) /* "grpc-server-stats-bin" */ -#define GRPC_MDSTR_GRPC_SERVER_STATS_BIN (grpc_static_slice_table[11]) +#define GRPC_MDSTR_GRPC_SERVER_STATS_BIN (grpc_static_slice_table()[11]) /* "grpc-tags-bin" */ -#define GRPC_MDSTR_GRPC_TAGS_BIN (grpc_static_slice_table[12]) +#define GRPC_MDSTR_GRPC_TAGS_BIN (grpc_static_slice_table()[12]) /* "grpc-trace-bin" */ -#define GRPC_MDSTR_GRPC_TRACE_BIN (grpc_static_slice_table[13]) +#define GRPC_MDSTR_GRPC_TRACE_BIN (grpc_static_slice_table()[13]) /* "content-type" */ -#define GRPC_MDSTR_CONTENT_TYPE (grpc_static_slice_table[14]) +#define GRPC_MDSTR_CONTENT_TYPE (grpc_static_slice_table()[14]) /* "content-encoding" */ -#define GRPC_MDSTR_CONTENT_ENCODING (grpc_static_slice_table[15]) +#define GRPC_MDSTR_CONTENT_ENCODING (grpc_static_slice_table()[15]) /* "accept-encoding" */ -#define GRPC_MDSTR_ACCEPT_ENCODING (grpc_static_slice_table[16]) +#define GRPC_MDSTR_ACCEPT_ENCODING (grpc_static_slice_table()[16]) /* "grpc-internal-encoding-request" */ -#define GRPC_MDSTR_GRPC_INTERNAL_ENCODING_REQUEST (grpc_static_slice_table[17]) +#define GRPC_MDSTR_GRPC_INTERNAL_ENCODING_REQUEST \ + (grpc_static_slice_table()[17]) /* "grpc-internal-stream-encoding-request" */ #define GRPC_MDSTR_GRPC_INTERNAL_STREAM_ENCODING_REQUEST \ - (grpc_static_slice_table[18]) + (grpc_static_slice_table()[18]) /* "user-agent" */ -#define GRPC_MDSTR_USER_AGENT (grpc_static_slice_table[19]) +#define GRPC_MDSTR_USER_AGENT (grpc_static_slice_table()[19]) /* "host" */ -#define GRPC_MDSTR_HOST (grpc_static_slice_table[20]) +#define GRPC_MDSTR_HOST (grpc_static_slice_table()[20]) /* "grpc-previous-rpc-attempts" */ -#define GRPC_MDSTR_GRPC_PREVIOUS_RPC_ATTEMPTS (grpc_static_slice_table[21]) +#define GRPC_MDSTR_GRPC_PREVIOUS_RPC_ATTEMPTS (grpc_static_slice_table()[21]) /* "grpc-retry-pushback-ms" */ -#define GRPC_MDSTR_GRPC_RETRY_PUSHBACK_MS (grpc_static_slice_table[22]) +#define GRPC_MDSTR_GRPC_RETRY_PUSHBACK_MS (grpc_static_slice_table()[22]) /* "grpc-timeout" */ -#define GRPC_MDSTR_GRPC_TIMEOUT (grpc_static_slice_table[23]) +#define GRPC_MDSTR_GRPC_TIMEOUT (grpc_static_slice_table()[23]) /* "1" */ -#define GRPC_MDSTR_1 (grpc_static_slice_table[24]) +#define GRPC_MDSTR_1 (grpc_static_slice_table()[24]) /* "2" */ -#define GRPC_MDSTR_2 (grpc_static_slice_table[25]) +#define GRPC_MDSTR_2 (grpc_static_slice_table()[25]) /* "3" */ -#define GRPC_MDSTR_3 (grpc_static_slice_table[26]) +#define GRPC_MDSTR_3 (grpc_static_slice_table()[26]) /* "4" */ -#define GRPC_MDSTR_4 (grpc_static_slice_table[27]) +#define GRPC_MDSTR_4 (grpc_static_slice_table()[27]) /* "" */ -#define GRPC_MDSTR_EMPTY (grpc_static_slice_table[28]) +#define GRPC_MDSTR_EMPTY (grpc_static_slice_table()[28]) /* "grpc.wait_for_ready" */ -#define GRPC_MDSTR_GRPC_DOT_WAIT_FOR_READY (grpc_static_slice_table[29]) +#define GRPC_MDSTR_GRPC_DOT_WAIT_FOR_READY (grpc_static_slice_table()[29]) /* "grpc.timeout" */ -#define GRPC_MDSTR_GRPC_DOT_TIMEOUT (grpc_static_slice_table[30]) +#define GRPC_MDSTR_GRPC_DOT_TIMEOUT (grpc_static_slice_table()[30]) /* "grpc.max_request_message_bytes" */ #define GRPC_MDSTR_GRPC_DOT_MAX_REQUEST_MESSAGE_BYTES \ - (grpc_static_slice_table[31]) + (grpc_static_slice_table()[31]) /* "grpc.max_response_message_bytes" */ #define GRPC_MDSTR_GRPC_DOT_MAX_RESPONSE_MESSAGE_BYTES \ - (grpc_static_slice_table[32]) + (grpc_static_slice_table()[32]) /* "/grpc.lb.v1.LoadBalancer/BalanceLoad" */ #define GRPC_MDSTR_SLASH_GRPC_DOT_LB_DOT_V1_DOT_LOADBALANCER_SLASH_BALANCELOAD \ - (grpc_static_slice_table[33]) + (grpc_static_slice_table()[33]) /* "/envoy.service.load_stats.v2.LoadReportingService/StreamLoadStats" */ #define GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V2_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS \ - (grpc_static_slice_table[34]) + (grpc_static_slice_table()[34]) /* "/envoy.api.v2.EndpointDiscoveryService/StreamEndpoints" */ #define GRPC_MDSTR_SLASH_ENVOY_DOT_API_DOT_V2_DOT_ENDPOINTDISCOVERYSERVICE_SLASH_STREAMENDPOINTS \ - (grpc_static_slice_table[35]) + (grpc_static_slice_table()[35]) /* "/grpc.health.v1.Health/Watch" */ #define GRPC_MDSTR_SLASH_GRPC_DOT_HEALTH_DOT_V1_DOT_HEALTH_SLASH_WATCH \ - (grpc_static_slice_table[36]) + (grpc_static_slice_table()[36]) /* "/envoy.service.discovery.v2.AggregatedDiscoveryService/StreamAggregatedResources" */ #define GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES \ - (grpc_static_slice_table[37]) + (grpc_static_slice_table()[37]) /* "deflate" */ -#define GRPC_MDSTR_DEFLATE (grpc_static_slice_table[38]) +#define GRPC_MDSTR_DEFLATE (grpc_static_slice_table()[38]) /* "gzip" */ -#define GRPC_MDSTR_GZIP (grpc_static_slice_table[39]) +#define GRPC_MDSTR_GZIP (grpc_static_slice_table()[39]) /* "stream/gzip" */ -#define GRPC_MDSTR_STREAM_SLASH_GZIP (grpc_static_slice_table[40]) +#define GRPC_MDSTR_STREAM_SLASH_GZIP (grpc_static_slice_table()[40]) /* "GET" */ -#define GRPC_MDSTR_GET (grpc_static_slice_table[41]) +#define GRPC_MDSTR_GET (grpc_static_slice_table()[41]) /* "POST" */ -#define GRPC_MDSTR_POST (grpc_static_slice_table[42]) +#define GRPC_MDSTR_POST (grpc_static_slice_table()[42]) /* "/" */ -#define GRPC_MDSTR_SLASH (grpc_static_slice_table[43]) +#define GRPC_MDSTR_SLASH (grpc_static_slice_table()[43]) /* "/index.html" */ -#define GRPC_MDSTR_SLASH_INDEX_DOT_HTML (grpc_static_slice_table[44]) +#define GRPC_MDSTR_SLASH_INDEX_DOT_HTML (grpc_static_slice_table()[44]) /* "http" */ -#define GRPC_MDSTR_HTTP (grpc_static_slice_table[45]) +#define GRPC_MDSTR_HTTP (grpc_static_slice_table()[45]) /* "https" */ -#define GRPC_MDSTR_HTTPS (grpc_static_slice_table[46]) +#define GRPC_MDSTR_HTTPS (grpc_static_slice_table()[46]) /* "200" */ -#define GRPC_MDSTR_200 (grpc_static_slice_table[47]) +#define GRPC_MDSTR_200 (grpc_static_slice_table()[47]) /* "204" */ -#define GRPC_MDSTR_204 (grpc_static_slice_table[48]) +#define GRPC_MDSTR_204 (grpc_static_slice_table()[48]) /* "206" */ -#define GRPC_MDSTR_206 (grpc_static_slice_table[49]) +#define GRPC_MDSTR_206 (grpc_static_slice_table()[49]) /* "304" */ -#define GRPC_MDSTR_304 (grpc_static_slice_table[50]) +#define GRPC_MDSTR_304 (grpc_static_slice_table()[50]) /* "400" */ -#define GRPC_MDSTR_400 (grpc_static_slice_table[51]) +#define GRPC_MDSTR_400 (grpc_static_slice_table()[51]) /* "404" */ -#define GRPC_MDSTR_404 (grpc_static_slice_table[52]) +#define GRPC_MDSTR_404 (grpc_static_slice_table()[52]) /* "500" */ -#define GRPC_MDSTR_500 (grpc_static_slice_table[53]) +#define GRPC_MDSTR_500 (grpc_static_slice_table()[53]) /* "accept-charset" */ -#define GRPC_MDSTR_ACCEPT_CHARSET (grpc_static_slice_table[54]) +#define GRPC_MDSTR_ACCEPT_CHARSET (grpc_static_slice_table()[54]) /* "gzip, deflate" */ -#define GRPC_MDSTR_GZIP_COMMA_DEFLATE (grpc_static_slice_table[55]) +#define GRPC_MDSTR_GZIP_COMMA_DEFLATE (grpc_static_slice_table()[55]) /* "accept-language" */ -#define GRPC_MDSTR_ACCEPT_LANGUAGE (grpc_static_slice_table[56]) +#define GRPC_MDSTR_ACCEPT_LANGUAGE (grpc_static_slice_table()[56]) /* "accept-ranges" */ -#define GRPC_MDSTR_ACCEPT_RANGES (grpc_static_slice_table[57]) +#define GRPC_MDSTR_ACCEPT_RANGES (grpc_static_slice_table()[57]) /* "accept" */ -#define GRPC_MDSTR_ACCEPT (grpc_static_slice_table[58]) +#define GRPC_MDSTR_ACCEPT (grpc_static_slice_table()[58]) /* "access-control-allow-origin" */ -#define GRPC_MDSTR_ACCESS_CONTROL_ALLOW_ORIGIN (grpc_static_slice_table[59]) +#define GRPC_MDSTR_ACCESS_CONTROL_ALLOW_ORIGIN (grpc_static_slice_table()[59]) /* "age" */ -#define GRPC_MDSTR_AGE (grpc_static_slice_table[60]) +#define GRPC_MDSTR_AGE (grpc_static_slice_table()[60]) /* "allow" */ -#define GRPC_MDSTR_ALLOW (grpc_static_slice_table[61]) +#define GRPC_MDSTR_ALLOW (grpc_static_slice_table()[61]) /* "authorization" */ -#define GRPC_MDSTR_AUTHORIZATION (grpc_static_slice_table[62]) +#define GRPC_MDSTR_AUTHORIZATION (grpc_static_slice_table()[62]) /* "cache-control" */ -#define GRPC_MDSTR_CACHE_CONTROL (grpc_static_slice_table[63]) +#define GRPC_MDSTR_CACHE_CONTROL (grpc_static_slice_table()[63]) /* "content-disposition" */ -#define GRPC_MDSTR_CONTENT_DISPOSITION (grpc_static_slice_table[64]) +#define GRPC_MDSTR_CONTENT_DISPOSITION (grpc_static_slice_table()[64]) /* "content-language" */ -#define GRPC_MDSTR_CONTENT_LANGUAGE (grpc_static_slice_table[65]) +#define GRPC_MDSTR_CONTENT_LANGUAGE (grpc_static_slice_table()[65]) /* "content-length" */ -#define GRPC_MDSTR_CONTENT_LENGTH (grpc_static_slice_table[66]) +#define GRPC_MDSTR_CONTENT_LENGTH (grpc_static_slice_table()[66]) /* "content-location" */ -#define GRPC_MDSTR_CONTENT_LOCATION (grpc_static_slice_table[67]) +#define GRPC_MDSTR_CONTENT_LOCATION (grpc_static_slice_table()[67]) /* "content-range" */ -#define GRPC_MDSTR_CONTENT_RANGE (grpc_static_slice_table[68]) +#define GRPC_MDSTR_CONTENT_RANGE (grpc_static_slice_table()[68]) /* "cookie" */ -#define GRPC_MDSTR_COOKIE (grpc_static_slice_table[69]) +#define GRPC_MDSTR_COOKIE (grpc_static_slice_table()[69]) /* "date" */ -#define GRPC_MDSTR_DATE (grpc_static_slice_table[70]) +#define GRPC_MDSTR_DATE (grpc_static_slice_table()[70]) /* "etag" */ -#define GRPC_MDSTR_ETAG (grpc_static_slice_table[71]) +#define GRPC_MDSTR_ETAG (grpc_static_slice_table()[71]) /* "expect" */ -#define GRPC_MDSTR_EXPECT (grpc_static_slice_table[72]) +#define GRPC_MDSTR_EXPECT (grpc_static_slice_table()[72]) /* "expires" */ -#define GRPC_MDSTR_EXPIRES (grpc_static_slice_table[73]) +#define GRPC_MDSTR_EXPIRES (grpc_static_slice_table()[73]) /* "from" */ -#define GRPC_MDSTR_FROM (grpc_static_slice_table[74]) +#define GRPC_MDSTR_FROM (grpc_static_slice_table()[74]) /* "if-match" */ -#define GRPC_MDSTR_IF_MATCH (grpc_static_slice_table[75]) +#define GRPC_MDSTR_IF_MATCH (grpc_static_slice_table()[75]) /* "if-modified-since" */ -#define GRPC_MDSTR_IF_MODIFIED_SINCE (grpc_static_slice_table[76]) +#define GRPC_MDSTR_IF_MODIFIED_SINCE (grpc_static_slice_table()[76]) /* "if-none-match" */ -#define GRPC_MDSTR_IF_NONE_MATCH (grpc_static_slice_table[77]) +#define GRPC_MDSTR_IF_NONE_MATCH (grpc_static_slice_table()[77]) /* "if-range" */ -#define GRPC_MDSTR_IF_RANGE (grpc_static_slice_table[78]) +#define GRPC_MDSTR_IF_RANGE (grpc_static_slice_table()[78]) /* "if-unmodified-since" */ -#define GRPC_MDSTR_IF_UNMODIFIED_SINCE (grpc_static_slice_table[79]) +#define GRPC_MDSTR_IF_UNMODIFIED_SINCE (grpc_static_slice_table()[79]) /* "last-modified" */ -#define GRPC_MDSTR_LAST_MODIFIED (grpc_static_slice_table[80]) +#define GRPC_MDSTR_LAST_MODIFIED (grpc_static_slice_table()[80]) /* "link" */ -#define GRPC_MDSTR_LINK (grpc_static_slice_table[81]) +#define GRPC_MDSTR_LINK (grpc_static_slice_table()[81]) /* "location" */ -#define GRPC_MDSTR_LOCATION (grpc_static_slice_table[82]) +#define GRPC_MDSTR_LOCATION (grpc_static_slice_table()[82]) /* "max-forwards" */ -#define GRPC_MDSTR_MAX_FORWARDS (grpc_static_slice_table[83]) +#define GRPC_MDSTR_MAX_FORWARDS (grpc_static_slice_table()[83]) /* "proxy-authenticate" */ -#define GRPC_MDSTR_PROXY_AUTHENTICATE (grpc_static_slice_table[84]) +#define GRPC_MDSTR_PROXY_AUTHENTICATE (grpc_static_slice_table()[84]) /* "proxy-authorization" */ -#define GRPC_MDSTR_PROXY_AUTHORIZATION (grpc_static_slice_table[85]) +#define GRPC_MDSTR_PROXY_AUTHORIZATION (grpc_static_slice_table()[85]) /* "range" */ -#define GRPC_MDSTR_RANGE (grpc_static_slice_table[86]) +#define GRPC_MDSTR_RANGE (grpc_static_slice_table()[86]) /* "referer" */ -#define GRPC_MDSTR_REFERER (grpc_static_slice_table[87]) +#define GRPC_MDSTR_REFERER (grpc_static_slice_table()[87]) /* "refresh" */ -#define GRPC_MDSTR_REFRESH (grpc_static_slice_table[88]) +#define GRPC_MDSTR_REFRESH (grpc_static_slice_table()[88]) /* "retry-after" */ -#define GRPC_MDSTR_RETRY_AFTER (grpc_static_slice_table[89]) +#define GRPC_MDSTR_RETRY_AFTER (grpc_static_slice_table()[89]) /* "server" */ -#define GRPC_MDSTR_SERVER (grpc_static_slice_table[90]) +#define GRPC_MDSTR_SERVER (grpc_static_slice_table()[90]) /* "set-cookie" */ -#define GRPC_MDSTR_SET_COOKIE (grpc_static_slice_table[91]) +#define GRPC_MDSTR_SET_COOKIE (grpc_static_slice_table()[91]) /* "strict-transport-security" */ -#define GRPC_MDSTR_STRICT_TRANSPORT_SECURITY (grpc_static_slice_table[92]) +#define GRPC_MDSTR_STRICT_TRANSPORT_SECURITY (grpc_static_slice_table()[92]) /* "transfer-encoding" */ -#define GRPC_MDSTR_TRANSFER_ENCODING (grpc_static_slice_table[93]) +#define GRPC_MDSTR_TRANSFER_ENCODING (grpc_static_slice_table()[93]) /* "vary" */ -#define GRPC_MDSTR_VARY (grpc_static_slice_table[94]) +#define GRPC_MDSTR_VARY (grpc_static_slice_table()[94]) /* "via" */ -#define GRPC_MDSTR_VIA (grpc_static_slice_table[95]) +#define GRPC_MDSTR_VIA (grpc_static_slice_table()[95]) /* "www-authenticate" */ -#define GRPC_MDSTR_WWW_AUTHENTICATE (grpc_static_slice_table[96]) +#define GRPC_MDSTR_WWW_AUTHENTICATE (grpc_static_slice_table()[96]) /* "0" */ -#define GRPC_MDSTR_0 (grpc_static_slice_table[97]) +#define GRPC_MDSTR_0 (grpc_static_slice_table()[97]) /* "identity" */ -#define GRPC_MDSTR_IDENTITY (grpc_static_slice_table[98]) +#define GRPC_MDSTR_IDENTITY (grpc_static_slice_table()[98]) /* "trailers" */ -#define GRPC_MDSTR_TRAILERS (grpc_static_slice_table[99]) +#define GRPC_MDSTR_TRAILERS (grpc_static_slice_table()[99]) /* "application/grpc" */ -#define GRPC_MDSTR_APPLICATION_SLASH_GRPC (grpc_static_slice_table[100]) +#define GRPC_MDSTR_APPLICATION_SLASH_GRPC (grpc_static_slice_table()[100]) /* "grpc" */ -#define GRPC_MDSTR_GRPC (grpc_static_slice_table[101]) +#define GRPC_MDSTR_GRPC (grpc_static_slice_table()[101]) /* "PUT" */ -#define GRPC_MDSTR_PUT (grpc_static_slice_table[102]) +#define GRPC_MDSTR_PUT (grpc_static_slice_table()[102]) /* "lb-cost-bin" */ -#define GRPC_MDSTR_LB_COST_BIN (grpc_static_slice_table[103]) +#define GRPC_MDSTR_LB_COST_BIN (grpc_static_slice_table()[103]) /* "identity,deflate" */ -#define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE (grpc_static_slice_table[104]) +#define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE (grpc_static_slice_table()[104]) /* "identity,gzip" */ -#define GRPC_MDSTR_IDENTITY_COMMA_GZIP (grpc_static_slice_table[105]) +#define GRPC_MDSTR_IDENTITY_COMMA_GZIP (grpc_static_slice_table()[105]) /* "deflate,gzip" */ -#define GRPC_MDSTR_DEFLATE_COMMA_GZIP (grpc_static_slice_table[106]) +#define GRPC_MDSTR_DEFLATE_COMMA_GZIP (grpc_static_slice_table()[106]) /* "identity,deflate,gzip" */ #define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE_COMMA_GZIP \ - (grpc_static_slice_table[107]) + (grpc_static_slice_table()[107]) namespace grpc_core { struct StaticSliceRefcount; +extern StaticSliceRefcount* g_static_metadata_slice_refcounts; +} // namespace grpc_core +inline grpc_core::StaticSliceRefcount* grpc_static_metadata_refcounts() { + GPR_DEBUG_ASSERT(grpc_core::StaticMetadataInitCanary() == + grpc_core::kGrpcStaticMetadataInitCanary); + GPR_DEBUG_ASSERT(grpc_core::g_static_metadata_slice_refcounts != nullptr); + return grpc_core::g_static_metadata_slice_refcounts; } -extern grpc_core::StaticSliceRefcount - grpc_static_metadata_refcounts[GRPC_STATIC_MDSTR_COUNT]; + #define GRPC_IS_STATIC_METADATA_STRING(slice) \ ((slice).refcount != NULL && \ (slice).refcount->GetType() == grpc_slice_refcount::Type::STATIC) @@ -280,196 +302,216 @@ extern grpc_core::StaticSliceRefcount ->index) #define GRPC_STATIC_MDELEM_COUNT 85 -extern grpc_core::StaticMetadata - grpc_static_mdelem_table[GRPC_STATIC_MDELEM_COUNT]; + +namespace grpc_core { +extern StaticMetadata* g_static_mdelem_table; +extern grpc_mdelem* g_static_mdelem_manifested; +} // namespace grpc_core +inline grpc_core::StaticMetadata* grpc_static_mdelem_table() { + GPR_DEBUG_ASSERT(grpc_core::StaticMetadataInitCanary() == + grpc_core::kGrpcStaticMetadataInitCanary); + GPR_DEBUG_ASSERT(grpc_core::g_static_mdelem_table != nullptr); + return grpc_core::g_static_mdelem_table; +} +inline grpc_mdelem* grpc_static_mdelem_manifested() { + GPR_DEBUG_ASSERT(grpc_core::StaticMetadataInitCanary() == + grpc_core::kGrpcStaticMetadataInitCanary); + GPR_DEBUG_ASSERT(grpc_core::g_static_mdelem_manifested != nullptr); + return grpc_core::g_static_mdelem_manifested; +} + extern uintptr_t grpc_static_mdelem_user_data[GRPC_STATIC_MDELEM_COUNT]; -extern grpc_mdelem grpc_static_mdelem_manifested[GRPC_STATIC_MDELEM_COUNT]; /* ":authority": "" */ -#define GRPC_MDELEM_AUTHORITY_EMPTY (grpc_static_mdelem_manifested[0]) +#define GRPC_MDELEM_AUTHORITY_EMPTY (grpc_static_mdelem_manifested()[0]) /* ":method": "GET" */ -#define GRPC_MDELEM_METHOD_GET (grpc_static_mdelem_manifested[1]) +#define GRPC_MDELEM_METHOD_GET (grpc_static_mdelem_manifested()[1]) /* ":method": "POST" */ -#define GRPC_MDELEM_METHOD_POST (grpc_static_mdelem_manifested[2]) +#define GRPC_MDELEM_METHOD_POST (grpc_static_mdelem_manifested()[2]) /* ":path": "/" */ -#define GRPC_MDELEM_PATH_SLASH (grpc_static_mdelem_manifested[3]) +#define GRPC_MDELEM_PATH_SLASH (grpc_static_mdelem_manifested()[3]) /* ":path": "/index.html" */ -#define GRPC_MDELEM_PATH_SLASH_INDEX_DOT_HTML (grpc_static_mdelem_manifested[4]) +#define GRPC_MDELEM_PATH_SLASH_INDEX_DOT_HTML \ + (grpc_static_mdelem_manifested()[4]) /* ":scheme": "http" */ -#define GRPC_MDELEM_SCHEME_HTTP (grpc_static_mdelem_manifested[5]) +#define GRPC_MDELEM_SCHEME_HTTP (grpc_static_mdelem_manifested()[5]) /* ":scheme": "https" */ -#define GRPC_MDELEM_SCHEME_HTTPS (grpc_static_mdelem_manifested[6]) +#define GRPC_MDELEM_SCHEME_HTTPS (grpc_static_mdelem_manifested()[6]) /* ":status": "200" */ -#define GRPC_MDELEM_STATUS_200 (grpc_static_mdelem_manifested[7]) +#define GRPC_MDELEM_STATUS_200 (grpc_static_mdelem_manifested()[7]) /* ":status": "204" */ -#define GRPC_MDELEM_STATUS_204 (grpc_static_mdelem_manifested[8]) +#define GRPC_MDELEM_STATUS_204 (grpc_static_mdelem_manifested()[8]) /* ":status": "206" */ -#define GRPC_MDELEM_STATUS_206 (grpc_static_mdelem_manifested[9]) +#define GRPC_MDELEM_STATUS_206 (grpc_static_mdelem_manifested()[9]) /* ":status": "304" */ -#define GRPC_MDELEM_STATUS_304 (grpc_static_mdelem_manifested[10]) +#define GRPC_MDELEM_STATUS_304 (grpc_static_mdelem_manifested()[10]) /* ":status": "400" */ -#define GRPC_MDELEM_STATUS_400 (grpc_static_mdelem_manifested[11]) +#define GRPC_MDELEM_STATUS_400 (grpc_static_mdelem_manifested()[11]) /* ":status": "404" */ -#define GRPC_MDELEM_STATUS_404 (grpc_static_mdelem_manifested[12]) +#define GRPC_MDELEM_STATUS_404 (grpc_static_mdelem_manifested()[12]) /* ":status": "500" */ -#define GRPC_MDELEM_STATUS_500 (grpc_static_mdelem_manifested[13]) +#define GRPC_MDELEM_STATUS_500 (grpc_static_mdelem_manifested()[13]) /* "accept-charset": "" */ -#define GRPC_MDELEM_ACCEPT_CHARSET_EMPTY (grpc_static_mdelem_manifested[14]) +#define GRPC_MDELEM_ACCEPT_CHARSET_EMPTY (grpc_static_mdelem_manifested()[14]) /* "accept-encoding": "gzip, deflate" */ #define GRPC_MDELEM_ACCEPT_ENCODING_GZIP_COMMA_DEFLATE \ - (grpc_static_mdelem_manifested[15]) + (grpc_static_mdelem_manifested()[15]) /* "accept-language": "" */ -#define GRPC_MDELEM_ACCEPT_LANGUAGE_EMPTY (grpc_static_mdelem_manifested[16]) +#define GRPC_MDELEM_ACCEPT_LANGUAGE_EMPTY (grpc_static_mdelem_manifested()[16]) /* "accept-ranges": "" */ -#define GRPC_MDELEM_ACCEPT_RANGES_EMPTY (grpc_static_mdelem_manifested[17]) +#define GRPC_MDELEM_ACCEPT_RANGES_EMPTY (grpc_static_mdelem_manifested()[17]) /* "accept": "" */ -#define GRPC_MDELEM_ACCEPT_EMPTY (grpc_static_mdelem_manifested[18]) +#define GRPC_MDELEM_ACCEPT_EMPTY (grpc_static_mdelem_manifested()[18]) /* "access-control-allow-origin": "" */ #define GRPC_MDELEM_ACCESS_CONTROL_ALLOW_ORIGIN_EMPTY \ - (grpc_static_mdelem_manifested[19]) + (grpc_static_mdelem_manifested()[19]) /* "age": "" */ -#define GRPC_MDELEM_AGE_EMPTY (grpc_static_mdelem_manifested[20]) +#define GRPC_MDELEM_AGE_EMPTY (grpc_static_mdelem_manifested()[20]) /* "allow": "" */ -#define GRPC_MDELEM_ALLOW_EMPTY (grpc_static_mdelem_manifested[21]) +#define GRPC_MDELEM_ALLOW_EMPTY (grpc_static_mdelem_manifested()[21]) /* "authorization": "" */ -#define GRPC_MDELEM_AUTHORIZATION_EMPTY (grpc_static_mdelem_manifested[22]) +#define GRPC_MDELEM_AUTHORIZATION_EMPTY (grpc_static_mdelem_manifested()[22]) /* "cache-control": "" */ -#define GRPC_MDELEM_CACHE_CONTROL_EMPTY (grpc_static_mdelem_manifested[23]) +#define GRPC_MDELEM_CACHE_CONTROL_EMPTY (grpc_static_mdelem_manifested()[23]) /* "content-disposition": "" */ #define GRPC_MDELEM_CONTENT_DISPOSITION_EMPTY \ - (grpc_static_mdelem_manifested[24]) + (grpc_static_mdelem_manifested()[24]) /* "content-encoding": "" */ -#define GRPC_MDELEM_CONTENT_ENCODING_EMPTY (grpc_static_mdelem_manifested[25]) +#define GRPC_MDELEM_CONTENT_ENCODING_EMPTY (grpc_static_mdelem_manifested()[25]) /* "content-language": "" */ -#define GRPC_MDELEM_CONTENT_LANGUAGE_EMPTY (grpc_static_mdelem_manifested[26]) +#define GRPC_MDELEM_CONTENT_LANGUAGE_EMPTY (grpc_static_mdelem_manifested()[26]) /* "content-length": "" */ -#define GRPC_MDELEM_CONTENT_LENGTH_EMPTY (grpc_static_mdelem_manifested[27]) +#define GRPC_MDELEM_CONTENT_LENGTH_EMPTY (grpc_static_mdelem_manifested()[27]) /* "content-location": "" */ -#define GRPC_MDELEM_CONTENT_LOCATION_EMPTY (grpc_static_mdelem_manifested[28]) +#define GRPC_MDELEM_CONTENT_LOCATION_EMPTY (grpc_static_mdelem_manifested()[28]) /* "content-range": "" */ -#define GRPC_MDELEM_CONTENT_RANGE_EMPTY (grpc_static_mdelem_manifested[29]) +#define GRPC_MDELEM_CONTENT_RANGE_EMPTY (grpc_static_mdelem_manifested()[29]) /* "content-type": "" */ -#define GRPC_MDELEM_CONTENT_TYPE_EMPTY (grpc_static_mdelem_manifested[30]) +#define GRPC_MDELEM_CONTENT_TYPE_EMPTY (grpc_static_mdelem_manifested()[30]) /* "cookie": "" */ -#define GRPC_MDELEM_COOKIE_EMPTY (grpc_static_mdelem_manifested[31]) +#define GRPC_MDELEM_COOKIE_EMPTY (grpc_static_mdelem_manifested()[31]) /* "date": "" */ -#define GRPC_MDELEM_DATE_EMPTY (grpc_static_mdelem_manifested[32]) +#define GRPC_MDELEM_DATE_EMPTY (grpc_static_mdelem_manifested()[32]) /* "etag": "" */ -#define GRPC_MDELEM_ETAG_EMPTY (grpc_static_mdelem_manifested[33]) +#define GRPC_MDELEM_ETAG_EMPTY (grpc_static_mdelem_manifested()[33]) /* "expect": "" */ -#define GRPC_MDELEM_EXPECT_EMPTY (grpc_static_mdelem_manifested[34]) +#define GRPC_MDELEM_EXPECT_EMPTY (grpc_static_mdelem_manifested()[34]) /* "expires": "" */ -#define GRPC_MDELEM_EXPIRES_EMPTY (grpc_static_mdelem_manifested[35]) +#define GRPC_MDELEM_EXPIRES_EMPTY (grpc_static_mdelem_manifested()[35]) /* "from": "" */ -#define GRPC_MDELEM_FROM_EMPTY (grpc_static_mdelem_manifested[36]) +#define GRPC_MDELEM_FROM_EMPTY (grpc_static_mdelem_manifested()[36]) /* "host": "" */ -#define GRPC_MDELEM_HOST_EMPTY (grpc_static_mdelem_manifested[37]) +#define GRPC_MDELEM_HOST_EMPTY (grpc_static_mdelem_manifested()[37]) /* "if-match": "" */ -#define GRPC_MDELEM_IF_MATCH_EMPTY (grpc_static_mdelem_manifested[38]) +#define GRPC_MDELEM_IF_MATCH_EMPTY (grpc_static_mdelem_manifested()[38]) /* "if-modified-since": "" */ -#define GRPC_MDELEM_IF_MODIFIED_SINCE_EMPTY (grpc_static_mdelem_manifested[39]) +#define GRPC_MDELEM_IF_MODIFIED_SINCE_EMPTY \ + (grpc_static_mdelem_manifested()[39]) /* "if-none-match": "" */ -#define GRPC_MDELEM_IF_NONE_MATCH_EMPTY (grpc_static_mdelem_manifested[40]) +#define GRPC_MDELEM_IF_NONE_MATCH_EMPTY (grpc_static_mdelem_manifested()[40]) /* "if-range": "" */ -#define GRPC_MDELEM_IF_RANGE_EMPTY (grpc_static_mdelem_manifested[41]) +#define GRPC_MDELEM_IF_RANGE_EMPTY (grpc_static_mdelem_manifested()[41]) /* "if-unmodified-since": "" */ #define GRPC_MDELEM_IF_UNMODIFIED_SINCE_EMPTY \ - (grpc_static_mdelem_manifested[42]) + (grpc_static_mdelem_manifested()[42]) /* "last-modified": "" */ -#define GRPC_MDELEM_LAST_MODIFIED_EMPTY (grpc_static_mdelem_manifested[43]) +#define GRPC_MDELEM_LAST_MODIFIED_EMPTY (grpc_static_mdelem_manifested()[43]) /* "link": "" */ -#define GRPC_MDELEM_LINK_EMPTY (grpc_static_mdelem_manifested[44]) +#define GRPC_MDELEM_LINK_EMPTY (grpc_static_mdelem_manifested()[44]) /* "location": "" */ -#define GRPC_MDELEM_LOCATION_EMPTY (grpc_static_mdelem_manifested[45]) +#define GRPC_MDELEM_LOCATION_EMPTY (grpc_static_mdelem_manifested()[45]) /* "max-forwards": "" */ -#define GRPC_MDELEM_MAX_FORWARDS_EMPTY (grpc_static_mdelem_manifested[46]) +#define GRPC_MDELEM_MAX_FORWARDS_EMPTY (grpc_static_mdelem_manifested()[46]) /* "proxy-authenticate": "" */ -#define GRPC_MDELEM_PROXY_AUTHENTICATE_EMPTY (grpc_static_mdelem_manifested[47]) +#define GRPC_MDELEM_PROXY_AUTHENTICATE_EMPTY \ + (grpc_static_mdelem_manifested()[47]) /* "proxy-authorization": "" */ #define GRPC_MDELEM_PROXY_AUTHORIZATION_EMPTY \ - (grpc_static_mdelem_manifested[48]) + (grpc_static_mdelem_manifested()[48]) /* "range": "" */ -#define GRPC_MDELEM_RANGE_EMPTY (grpc_static_mdelem_manifested[49]) +#define GRPC_MDELEM_RANGE_EMPTY (grpc_static_mdelem_manifested()[49]) /* "referer": "" */ -#define GRPC_MDELEM_REFERER_EMPTY (grpc_static_mdelem_manifested[50]) +#define GRPC_MDELEM_REFERER_EMPTY (grpc_static_mdelem_manifested()[50]) /* "refresh": "" */ -#define GRPC_MDELEM_REFRESH_EMPTY (grpc_static_mdelem_manifested[51]) +#define GRPC_MDELEM_REFRESH_EMPTY (grpc_static_mdelem_manifested()[51]) /* "retry-after": "" */ -#define GRPC_MDELEM_RETRY_AFTER_EMPTY (grpc_static_mdelem_manifested[52]) +#define GRPC_MDELEM_RETRY_AFTER_EMPTY (grpc_static_mdelem_manifested()[52]) /* "server": "" */ -#define GRPC_MDELEM_SERVER_EMPTY (grpc_static_mdelem_manifested[53]) +#define GRPC_MDELEM_SERVER_EMPTY (grpc_static_mdelem_manifested()[53]) /* "set-cookie": "" */ -#define GRPC_MDELEM_SET_COOKIE_EMPTY (grpc_static_mdelem_manifested[54]) +#define GRPC_MDELEM_SET_COOKIE_EMPTY (grpc_static_mdelem_manifested()[54]) /* "strict-transport-security": "" */ #define GRPC_MDELEM_STRICT_TRANSPORT_SECURITY_EMPTY \ - (grpc_static_mdelem_manifested[55]) + (grpc_static_mdelem_manifested()[55]) /* "transfer-encoding": "" */ -#define GRPC_MDELEM_TRANSFER_ENCODING_EMPTY (grpc_static_mdelem_manifested[56]) +#define GRPC_MDELEM_TRANSFER_ENCODING_EMPTY \ + (grpc_static_mdelem_manifested()[56]) /* "user-agent": "" */ -#define GRPC_MDELEM_USER_AGENT_EMPTY (grpc_static_mdelem_manifested[57]) +#define GRPC_MDELEM_USER_AGENT_EMPTY (grpc_static_mdelem_manifested()[57]) /* "vary": "" */ -#define GRPC_MDELEM_VARY_EMPTY (grpc_static_mdelem_manifested[58]) +#define GRPC_MDELEM_VARY_EMPTY (grpc_static_mdelem_manifested()[58]) /* "via": "" */ -#define GRPC_MDELEM_VIA_EMPTY (grpc_static_mdelem_manifested[59]) +#define GRPC_MDELEM_VIA_EMPTY (grpc_static_mdelem_manifested()[59]) /* "www-authenticate": "" */ -#define GRPC_MDELEM_WWW_AUTHENTICATE_EMPTY (grpc_static_mdelem_manifested[60]) +#define GRPC_MDELEM_WWW_AUTHENTICATE_EMPTY (grpc_static_mdelem_manifested()[60]) /* "grpc-status": "0" */ -#define GRPC_MDELEM_GRPC_STATUS_0 (grpc_static_mdelem_manifested[61]) +#define GRPC_MDELEM_GRPC_STATUS_0 (grpc_static_mdelem_manifested()[61]) /* "grpc-status": "1" */ -#define GRPC_MDELEM_GRPC_STATUS_1 (grpc_static_mdelem_manifested[62]) +#define GRPC_MDELEM_GRPC_STATUS_1 (grpc_static_mdelem_manifested()[62]) /* "grpc-status": "2" */ -#define GRPC_MDELEM_GRPC_STATUS_2 (grpc_static_mdelem_manifested[63]) +#define GRPC_MDELEM_GRPC_STATUS_2 (grpc_static_mdelem_manifested()[63]) /* "grpc-encoding": "identity" */ -#define GRPC_MDELEM_GRPC_ENCODING_IDENTITY (grpc_static_mdelem_manifested[64]) +#define GRPC_MDELEM_GRPC_ENCODING_IDENTITY (grpc_static_mdelem_manifested()[64]) /* "grpc-encoding": "gzip" */ -#define GRPC_MDELEM_GRPC_ENCODING_GZIP (grpc_static_mdelem_manifested[65]) +#define GRPC_MDELEM_GRPC_ENCODING_GZIP (grpc_static_mdelem_manifested()[65]) /* "grpc-encoding": "deflate" */ -#define GRPC_MDELEM_GRPC_ENCODING_DEFLATE (grpc_static_mdelem_manifested[66]) +#define GRPC_MDELEM_GRPC_ENCODING_DEFLATE (grpc_static_mdelem_manifested()[66]) /* "te": "trailers" */ -#define GRPC_MDELEM_TE_TRAILERS (grpc_static_mdelem_manifested[67]) +#define GRPC_MDELEM_TE_TRAILERS (grpc_static_mdelem_manifested()[67]) /* "content-type": "application/grpc" */ #define GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC \ - (grpc_static_mdelem_manifested[68]) + (grpc_static_mdelem_manifested()[68]) /* ":scheme": "grpc" */ -#define GRPC_MDELEM_SCHEME_GRPC (grpc_static_mdelem_manifested[69]) +#define GRPC_MDELEM_SCHEME_GRPC (grpc_static_mdelem_manifested()[69]) /* ":method": "PUT" */ -#define GRPC_MDELEM_METHOD_PUT (grpc_static_mdelem_manifested[70]) +#define GRPC_MDELEM_METHOD_PUT (grpc_static_mdelem_manifested()[70]) /* "accept-encoding": "" */ -#define GRPC_MDELEM_ACCEPT_ENCODING_EMPTY (grpc_static_mdelem_manifested[71]) +#define GRPC_MDELEM_ACCEPT_ENCODING_EMPTY (grpc_static_mdelem_manifested()[71]) /* "content-encoding": "identity" */ #define GRPC_MDELEM_CONTENT_ENCODING_IDENTITY \ - (grpc_static_mdelem_manifested[72]) + (grpc_static_mdelem_manifested()[72]) /* "content-encoding": "gzip" */ -#define GRPC_MDELEM_CONTENT_ENCODING_GZIP (grpc_static_mdelem_manifested[73]) +#define GRPC_MDELEM_CONTENT_ENCODING_GZIP (grpc_static_mdelem_manifested()[73]) /* "lb-cost-bin": "" */ -#define GRPC_MDELEM_LB_COST_BIN_EMPTY (grpc_static_mdelem_manifested[74]) +#define GRPC_MDELEM_LB_COST_BIN_EMPTY (grpc_static_mdelem_manifested()[74]) /* "grpc-accept-encoding": "identity" */ #define GRPC_MDELEM_GRPC_ACCEPT_ENCODING_IDENTITY \ - (grpc_static_mdelem_manifested[75]) + (grpc_static_mdelem_manifested()[75]) /* "grpc-accept-encoding": "deflate" */ #define GRPC_MDELEM_GRPC_ACCEPT_ENCODING_DEFLATE \ - (grpc_static_mdelem_manifested[76]) + (grpc_static_mdelem_manifested()[76]) /* "grpc-accept-encoding": "identity,deflate" */ #define GRPC_MDELEM_GRPC_ACCEPT_ENCODING_IDENTITY_COMMA_DEFLATE \ - (grpc_static_mdelem_manifested[77]) + (grpc_static_mdelem_manifested()[77]) /* "grpc-accept-encoding": "gzip" */ #define GRPC_MDELEM_GRPC_ACCEPT_ENCODING_GZIP \ - (grpc_static_mdelem_manifested[78]) + (grpc_static_mdelem_manifested()[78]) /* "grpc-accept-encoding": "identity,gzip" */ #define GRPC_MDELEM_GRPC_ACCEPT_ENCODING_IDENTITY_COMMA_GZIP \ - (grpc_static_mdelem_manifested[79]) + (grpc_static_mdelem_manifested()[79]) /* "grpc-accept-encoding": "deflate,gzip" */ #define GRPC_MDELEM_GRPC_ACCEPT_ENCODING_DEFLATE_COMMA_GZIP \ - (grpc_static_mdelem_manifested[80]) + (grpc_static_mdelem_manifested()[80]) /* "grpc-accept-encoding": "identity,deflate,gzip" */ #define GRPC_MDELEM_GRPC_ACCEPT_ENCODING_IDENTITY_COMMA_DEFLATE_COMMA_GZIP \ - (grpc_static_mdelem_manifested[81]) + (grpc_static_mdelem_manifested()[81]) /* "accept-encoding": "identity" */ -#define GRPC_MDELEM_ACCEPT_ENCODING_IDENTITY (grpc_static_mdelem_manifested[82]) +#define GRPC_MDELEM_ACCEPT_ENCODING_IDENTITY \ + (grpc_static_mdelem_manifested()[82]) /* "accept-encoding": "gzip" */ -#define GRPC_MDELEM_ACCEPT_ENCODING_GZIP (grpc_static_mdelem_manifested[83]) +#define GRPC_MDELEM_ACCEPT_ENCODING_GZIP (grpc_static_mdelem_manifested()[83]) /* "accept-encoding": "identity,gzip" */ #define GRPC_MDELEM_ACCEPT_ENCODING_IDENTITY_COMMA_GZIP \ - (grpc_static_mdelem_manifested[84]) + (grpc_static_mdelem_manifested()[84]) grpc_mdelem grpc_static_mdelem_for_static_strings(intptr_t a, intptr_t b); typedef enum { @@ -539,15 +581,15 @@ typedef union { : GRPC_BATCH_CALLOUTS_COUNT) extern const uint8_t grpc_static_accept_encoding_metadata[8]; -#define GRPC_MDELEM_ACCEPT_ENCODING_FOR_ALGORITHMS(algs) \ - (GRPC_MAKE_MDELEM( \ - &grpc_static_mdelem_table[grpc_static_accept_encoding_metadata[(algs)]] \ - .data(), \ - GRPC_MDELEM_STORAGE_STATIC)) +#define GRPC_MDELEM_ACCEPT_ENCODING_FOR_ALGORITHMS(algs) \ + (GRPC_MAKE_MDELEM(&grpc_static_mdelem_table() \ + [grpc_static_accept_encoding_metadata[(algs)]] \ + .data(), \ + GRPC_MDELEM_STORAGE_STATIC)) extern const uint8_t grpc_static_accept_stream_encoding_metadata[4]; #define GRPC_MDELEM_ACCEPT_STREAM_ENCODING_FOR_ALGORITHMS(algs) \ - (GRPC_MAKE_MDELEM(&grpc_static_mdelem_table \ + (GRPC_MAKE_MDELEM(&grpc_static_mdelem_table() \ [grpc_static_accept_stream_encoding_metadata[(algs)]] \ .data(), \ GRPC_MDELEM_STORAGE_STATIC)) diff --git a/test/core/slice/slice_test.cc b/test/core/slice/slice_test.cc index 4f824cbd5ad..fedda5f493f 100644 --- a/test/core/slice/slice_test.cc +++ b/test/core/slice/slice_test.cc @@ -265,8 +265,8 @@ static void test_static_slice_interning(void) { for (size_t i = 0; i < GRPC_STATIC_MDSTR_COUNT; i++) { GPR_ASSERT(grpc_slice_is_equivalent( - grpc_static_slice_table[i], - grpc_slice_intern(grpc_static_slice_table[i]))); + grpc_static_slice_table()[i], + grpc_slice_intern(grpc_static_slice_table()[i]))); } } @@ -276,9 +276,9 @@ static void test_static_slice_copy_interning(void) { grpc_init(); for (size_t i = 0; i < GRPC_STATIC_MDSTR_COUNT; i++) { - grpc_slice copy = grpc_slice_dup(grpc_static_slice_table[i]); - GPR_ASSERT(grpc_static_slice_table[i].refcount != copy.refcount); - GPR_ASSERT(grpc_static_slice_table[i].refcount == + grpc_slice copy = grpc_slice_dup(grpc_static_slice_table()[i]); + GPR_ASSERT(grpc_static_slice_table()[i].refcount != copy.refcount); + GPR_ASSERT(grpc_static_slice_table()[i].refcount == grpc_slice_intern(copy).refcount); grpc_slice_unref(copy); } diff --git a/test/core/transport/metadata_test.cc b/test/core/transport/metadata_test.cc index e6b73de2de5..0786d78d7f9 100644 --- a/test/core/transport/metadata_test.cc +++ b/test/core/transport/metadata_test.cc @@ -373,7 +373,7 @@ static void test_copied_static_metadata(bool dup_key, bool dup_value) { grpc_core::ExecCtx exec_ctx; for (size_t i = 0; i < GRPC_STATIC_MDELEM_COUNT; i++) { - grpc_mdelem p = GRPC_MAKE_MDELEM(&grpc_static_mdelem_table[i], + grpc_mdelem p = GRPC_MAKE_MDELEM(&grpc_static_mdelem_table()[i], GRPC_MDELEM_STORAGE_STATIC); grpc_mdelem q = grpc_mdelem_from_slices(maybe_dup(GRPC_MDKEY(p), dup_key), diff --git a/test/core/transport/status_metadata_test.cc b/test/core/transport/status_metadata_test.cc index a96f11c1ea3..d5723a4313f 100644 --- a/test/core/transport/status_metadata_test.cc +++ b/test/core/transport/status_metadata_test.cc @@ -57,5 +57,8 @@ TEST(GetStatusCodeFromMetadata, Unparseable) { int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + grpc_init(); + int ret = RUN_ALL_TESTS(); + grpc_shutdown(); + return ret; } diff --git a/tools/codegen/core/gen_static_metadata.py b/tools/codegen/core/gen_static_metadata.py index fc1bfe99934..d79759f541c 100755 --- a/tools/codegen/core/gen_static_metadata.py +++ b/tools/codegen/core/gen_static_metadata.py @@ -393,12 +393,24 @@ for i, elem in enumerate(all_strs): str_ofs += len(elem) +def slice_def_for_ctx(i): + return ( + 'grpc_core::StaticMetadataSlice(&refcounts[%d].base, %d, g_bytes+%d)' + ) % (i, len(all_strs[i]), id2strofs[i]) + + def slice_def(i): return ( - 'grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts[%d].base, %d, g_bytes+%d)' + 'grpc_core::StaticMetadataSlice(&grpc_static_metadata_refcounts()[%d].base, %d, g_bytes+%d)' ) % (i, len(all_strs[i]), id2strofs[i]) +def str_idx(s): + for i, s2 in enumerate(all_strs): + if s == s2: + return i + + # validate configuration for elem in METADATA_BATCH_CALLOUTS: assert elem in all_strs @@ -408,55 +420,70 @@ static_slice_dest_assert = ( '"grpc_core::StaticMetadataSlice must be trivially destructible.");') print >> H, static_slice_dest_assert print >> H, '#define GRPC_STATIC_MDSTR_COUNT %d' % len(all_strs) -print >> H, ('extern const grpc_core::StaticMetadataSlice ' - 'grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT];') +print >> H, ''' +void grpc_init_static_metadata_ctx(void); +void grpc_destroy_static_metadata_ctx(void); +namespace grpc_core { +#ifndef NDEBUG +constexpr uint64_t kGrpcStaticMetadataInitCanary = 0xCAFEF00DC0FFEE11L; +uint64_t StaticMetadataInitCanary(); +#endif +extern const StaticMetadataSlice* g_static_metadata_slice_table; +} +inline const grpc_core::StaticMetadataSlice* grpc_static_slice_table() { + GPR_DEBUG_ASSERT(grpc_core::StaticMetadataInitCanary() + == grpc_core::kGrpcStaticMetadataInitCanary); + GPR_DEBUG_ASSERT(grpc_core::g_static_metadata_slice_table != nullptr); + return grpc_core::g_static_metadata_slice_table; +} +''' for i, elem in enumerate(all_strs): print >> H, '/* "%s" */' % elem - print >> H, '#define %s (grpc_static_slice_table[%d])' % ( + print >> H, '#define %s (grpc_static_slice_table()[%d])' % ( mangle(elem).upper(), i) print >> H -print >> C, 'static uint8_t g_bytes[] = {%s};' % (','.join( +print >> C, 'static constexpr uint8_t g_bytes[] = {%s};' % (','.join( '%d' % ord(c) for c in ''.join(all_strs))) print >> C -print >> H, ('namespace grpc_core { struct StaticSliceRefcount; }') -print >> H, ('extern grpc_core::StaticSliceRefcount ' - 'grpc_static_metadata_refcounts[GRPC_STATIC_MDSTR_COUNT];') +print >> H, ''' +namespace grpc_core { +struct StaticSliceRefcount; +extern StaticSliceRefcount* g_static_metadata_slice_refcounts; +} +inline grpc_core::StaticSliceRefcount* grpc_static_metadata_refcounts() { + GPR_DEBUG_ASSERT(grpc_core::StaticMetadataInitCanary() + == grpc_core::kGrpcStaticMetadataInitCanary); + GPR_DEBUG_ASSERT(grpc_core::g_static_metadata_slice_refcounts != nullptr); + return grpc_core::g_static_metadata_slice_refcounts; +} +''' print >> C, 'grpc_slice_refcount grpc_core::StaticSliceRefcount::kStaticSubRefcount;' -print >> C, ('grpc_core::StaticSliceRefcount ' - 'grpc_static_metadata_refcounts[GRPC_STATIC_MDSTR_COUNT] = {') -for i, elem in enumerate(all_strs): - print >> C, ' grpc_core::StaticSliceRefcount(%d), ' % i -print >> C, '};' -print >> C -print >> H, '#define GRPC_IS_STATIC_METADATA_STRING(slice) \\' -print >> H, (' ((slice).refcount != NULL && (slice).refcount->GetType() == ' - 'grpc_slice_refcount::Type::STATIC)') -print >> H -print >> C, ( - 'const grpc_core::StaticMetadataSlice grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT]' - ' = {') +print >> C, ''' +namespace grpc_core { +struct StaticMetadataCtx { +#ifndef NDEBUG + const uint64_t init_canary = kGrpcStaticMetadataInitCanary; +#endif + StaticSliceRefcount + refcounts[GRPC_STATIC_MDSTR_COUNT] = { +''' for i, elem in enumerate(all_strs): - print >> C, slice_def(i) + ',' -print >> C, '};' + print >> C, ' StaticSliceRefcount(%d), ' % i +print >> C, '};' # static slice refcounts print >> C -print >> H, '#define GRPC_STATIC_METADATA_INDEX(static_slice) \\' -print >> H, '(reinterpret_cast((static_slice).refcount)->index)' -print >> H - -print >> D, '# hpack fuzzing dictionary' +print >> C, ''' + const StaticMetadataSlice + slices[GRPC_STATIC_MDSTR_COUNT] = { +''' for i, elem in enumerate(all_strs): - print >> D, '%s' % (esc_dict([len(elem)] + [ord(c) for c in elem])) -for i, elem in enumerate(all_elems): - print >> D, '%s' % (esc_dict([0, len(elem[0])] + [ord(c) for c in elem[0]] + - [len(elem[1])] + [ord(c) for c in elem[1]])) - -print >> H, '#define GRPC_STATIC_MDELEM_COUNT %d' % len(all_elems) -print >> H, ('extern grpc_core::StaticMetadata ' - 'grpc_static_mdelem_table[GRPC_STATIC_MDELEM_COUNT];') -print >> H, ('extern uintptr_t ' - 'grpc_static_mdelem_user_data[GRPC_STATIC_MDELEM_COUNT];') -print >> H, ('extern grpc_mdelem ' - 'grpc_static_mdelem_manifested[GRPC_STATIC_MDELEM_COUNT];') + print >> C, slice_def_for_ctx(i) + ',' +print >> C, '};' # static slices +print >> C, 'StaticMetadata static_mdelem_table[GRPC_STATIC_MDELEM_COUNT] = {' +for idx, (a, b) in enumerate(all_elems): + print >> C, 'StaticMetadata(%s,%s, %d),' % (slice_def_for_ctx(str_idx(a)), + slice_def_for_ctx(str_idx(b)), + idx) +print >> C, '};' # static_mdelem_table print >> C, (''' /* Warning: the core static metadata currently operates under the soft constraint that the first GRPC_CHTTP2_LAST_STATIC_ENTRY (61) entries must contain @@ -466,7 +493,7 @@ metadata is to be changed, then the CHTTP2 transport must be changed as well to stop relying on the core metadata. */ ''') print >> C, ('grpc_mdelem ' - 'grpc_static_mdelem_manifested[GRPC_STATIC_MDELEM_COUNT] = {') + 'static_mdelem_manifested[GRPC_STATIC_MDELEM_COUNT] = {') print >> C, '// clang-format off' static_mds = [] for i, elem in enumerate(all_elems): @@ -474,18 +501,97 @@ for i, elem in enumerate(all_elems): md_human_readable = '"%s": "%s"' % elem md_spec = ' /* %s: \n %s */\n' % (md_name, md_human_readable) md_spec += ' GRPC_MAKE_MDELEM(\n' - md_spec += ((' &grpc_static_mdelem_table[%d].data(),\n' % i) + + md_spec += ((' &static_mdelem_table[%d].data(),\n' % i) + ' GRPC_MDELEM_STORAGE_STATIC)') static_mds.append(md_spec) print >> C, ',\n'.join(static_mds) print >> C, '// clang-format on' -print >> C, ('};') +print >> C, ('};') # static_mdelem_manifested +print >> C, '};' # struct StaticMetadataCtx +print >> C, '}' # namespace grpc_core +print >> C, ''' +namespace grpc_core { +static StaticMetadataCtx* g_static_metadata_slice_ctx = nullptr; +const StaticMetadataSlice* g_static_metadata_slice_table = nullptr; +StaticSliceRefcount* g_static_metadata_slice_refcounts = nullptr; +StaticMetadata* g_static_mdelem_table = nullptr; +grpc_mdelem* g_static_mdelem_manifested = nullptr; +#ifndef NDEBUG +uint64_t StaticMetadataInitCanary() { + return g_static_metadata_slice_ctx->init_canary; +} +#endif +} + +void grpc_init_static_metadata_ctx(void) { + grpc_core::g_static_metadata_slice_ctx + = grpc_core::New(); + grpc_core::g_static_metadata_slice_table + = grpc_core::g_static_metadata_slice_ctx->slices; + grpc_core::g_static_metadata_slice_refcounts + = grpc_core::g_static_metadata_slice_ctx->refcounts; + grpc_core::g_static_mdelem_table + = grpc_core::g_static_metadata_slice_ctx->static_mdelem_table; + grpc_core::g_static_mdelem_manifested = + grpc_core::g_static_metadata_slice_ctx->static_mdelem_manifested; +} + +void grpc_destroy_static_metadata_ctx(void) { + grpc_core::Delete( + grpc_core::g_static_metadata_slice_ctx); + grpc_core::g_static_metadata_slice_ctx = nullptr; + grpc_core::g_static_metadata_slice_table = nullptr; + grpc_core::g_static_metadata_slice_refcounts = nullptr; + grpc_core::g_static_mdelem_table = nullptr; + grpc_core::g_static_mdelem_manifested = nullptr; +} + +''' + +print >> C +print >> H, '#define GRPC_IS_STATIC_METADATA_STRING(slice) \\' +print >> H, (' ((slice).refcount != NULL && (slice).refcount->GetType() == ' + 'grpc_slice_refcount::Type::STATIC)') +print >> H +print >> C +print >> H, '#define GRPC_STATIC_METADATA_INDEX(static_slice) \\' +print >> H, '(reinterpret_cast((static_slice).refcount)->index)' +print >> H + +print >> D, '# hpack fuzzing dictionary' +for i, elem in enumerate(all_strs): + print >> D, '%s' % (esc_dict([len(elem)] + [ord(c) for c in elem])) +for i, elem in enumerate(all_elems): + print >> D, '%s' % (esc_dict([0, len(elem[0])] + [ord(c) for c in elem[0]] + + [len(elem[1])] + [ord(c) for c in elem[1]])) + +print >> H, '#define GRPC_STATIC_MDELEM_COUNT %d' % len(all_elems) +print >> H, ''' +namespace grpc_core { +extern StaticMetadata* g_static_mdelem_table; +extern grpc_mdelem* g_static_mdelem_manifested; +} +inline grpc_core::StaticMetadata* grpc_static_mdelem_table() { + GPR_DEBUG_ASSERT(grpc_core::StaticMetadataInitCanary() + == grpc_core::kGrpcStaticMetadataInitCanary); + GPR_DEBUG_ASSERT(grpc_core::g_static_mdelem_table != nullptr); + return grpc_core::g_static_mdelem_table; +} +inline grpc_mdelem* grpc_static_mdelem_manifested() { + GPR_DEBUG_ASSERT(grpc_core::StaticMetadataInitCanary() + == grpc_core::kGrpcStaticMetadataInitCanary); + GPR_DEBUG_ASSERT(grpc_core::g_static_mdelem_manifested != nullptr); + return grpc_core::g_static_mdelem_manifested; +} +''' +print >> H, ('extern uintptr_t ' + 'grpc_static_mdelem_user_data[GRPC_STATIC_MDELEM_COUNT];') for i, elem in enumerate(all_elems): md_name = mangle(elem).upper() print >> H, '/* "%s": "%s" */' % elem - print >> H, ('#define %s (grpc_static_mdelem_manifested[%d])' % (md_name, - i)) + print >> H, ('#define %s (grpc_static_mdelem_manifested()[%d])' % (md_name, + i)) print >> H print >> C, ('uintptr_t grpc_static_mdelem_user_data[GRPC_STATIC_MDELEM_COUNT] ' @@ -496,12 +602,6 @@ print >> C, '};' print >> C -def str_idx(s): - for i, s2 in enumerate(all_strs): - if s == s2: - return i - - def md_idx(m): for i, m2 in enumerate(all_elems): if m == m2: @@ -575,16 +675,10 @@ print >> C, 'grpc_mdelem grpc_static_mdelem_for_static_strings(intptr_t a, intpt print >> C, ' if (a == -1 || b == -1) return GRPC_MDNULL;' print >> C, ' uint32_t k = static_cast(a * %d + b);' % len(all_strs) print >> C, ' uint32_t h = elems_phash(k);' -print >> C, ' return h < GPR_ARRAY_SIZE(elem_keys) && elem_keys[h] == k && elem_idxs[h] != 255 ? GRPC_MAKE_MDELEM(&grpc_static_mdelem_table[elem_idxs[h]].data(), GRPC_MDELEM_STORAGE_STATIC) : GRPC_MDNULL;' +print >> C, ' return h < GPR_ARRAY_SIZE(elem_keys) && elem_keys[h] == k && elem_idxs[h] != 255 ? GRPC_MAKE_MDELEM(&grpc_static_mdelem_table()[elem_idxs[h]].data(), GRPC_MDELEM_STORAGE_STATIC) : GRPC_MDNULL;' print >> C, '}' print >> C -print >> C, 'grpc_core::StaticMetadata grpc_static_mdelem_table[GRPC_STATIC_MDELEM_COUNT] = {' -for idx, (a, b) in enumerate(all_elems): - print >> C, 'grpc_core::StaticMetadata(%s,%s, %d),' % ( - slice_def(str_idx(a)), slice_def(str_idx(b)), idx) -print >> C, '};' - print >> H, 'typedef enum {' for elem in METADATA_BATCH_CALLOUTS: print >> H, ' %s,' % mangle(elem, 'batch').upper() @@ -629,7 +723,7 @@ print >> C, '0,%s' % ','.join('%d' % md_idx(elem) for elem in compression_elems) print >> C, '};' print >> C -print >> H, '#define GRPC_MDELEM_ACCEPT_ENCODING_FOR_ALGORITHMS(algs) (GRPC_MAKE_MDELEM(&grpc_static_mdelem_table[grpc_static_accept_encoding_metadata[(algs)]].data(), GRPC_MDELEM_STORAGE_STATIC))' +print >> H, '#define GRPC_MDELEM_ACCEPT_ENCODING_FOR_ALGORITHMS(algs) (GRPC_MAKE_MDELEM(&grpc_static_mdelem_table()[grpc_static_accept_encoding_metadata[(algs)]].data(), GRPC_MDELEM_STORAGE_STATIC))' print >> H print >> H, 'extern const uint8_t grpc_static_accept_stream_encoding_metadata[%d];' % ( @@ -640,7 +734,7 @@ print >> C, '0,%s' % ','.join( '%d' % md_idx(elem) for elem in stream_compression_elems) print >> C, '};' -print >> H, '#define GRPC_MDELEM_ACCEPT_STREAM_ENCODING_FOR_ALGORITHMS(algs) (GRPC_MAKE_MDELEM(&grpc_static_mdelem_table[grpc_static_accept_stream_encoding_metadata[(algs)]].data(), GRPC_MDELEM_STORAGE_STATIC))' +print >> H, '#define GRPC_MDELEM_ACCEPT_STREAM_ENCODING_FOR_ALGORITHMS(algs) (GRPC_MAKE_MDELEM(&grpc_static_mdelem_table()[grpc_static_accept_stream_encoding_metadata[(algs)]].data(), GRPC_MDELEM_STORAGE_STATIC))' print >> H, '#endif /* GRPC_CORE_LIB_TRANSPORT_STATIC_METADATA_H */'