Add commentary
diff --git a/src/core/transport/metadata.c b/src/core/transport/metadata.c
index 0ea3dd2..fa941a7 100644
--- a/src/core/transport/metadata.c
+++ b/src/core/transport/metadata.c
@@ -46,6 +46,15 @@
#include "src/core/transport/chttp2/bin_encoder.h"
#include "src/core/transport/static_metadata.h"
+/* There are two kinds of mdelem and mdstr instances.
+ * Static instances are declared in static_metadata.{h,c} and
+ * are initialized by grpc_mdctx_global_init().
+ * Dynamic instances are stored in hash tables on grpc_mdctx, and are backed
+ * by internal_string and internal_element structures.
+ * Internal helper functions here-in (is_mdstr_static, is_mdelem_static) are
+ * used to determine which kind of element a pointer refers to.
+ */
+
#define INITIAL_STRTAB_CAPACITY 4
#define INITIAL_MDTAB_CAPACITY 4
@@ -81,6 +90,7 @@
typedef void (*destroy_user_data_func)(void *user_data);
+/* Shadow structure for grpc_mdstr for non-static values */
typedef struct internal_string {
/* must be byte compatible with grpc_mdstr */
gpr_slice slice;
@@ -98,6 +108,7 @@
struct internal_string *bucket_next;
} internal_string;
+/* Shadow structure for grpc_mdelem for non-static elements */
typedef struct internal_metadata {
/* must be byte compatible with grpc_mdelem */
internal_string *key;
@@ -130,15 +141,18 @@
gpr_mu mu;
+ /* linearly probed hash tables for static element lookup */
static_string static_strtab[GRPC_STATIC_MDSTR_COUNT * 2];
static_mdelem static_mdtab[GRPC_STATIC_MDELEM_COUNT * 2];
size_t static_strtab_maxprobe;
size_t static_mdtab_maxprobe;
+ /* chained hash table of dynamically allocated strings */
internal_string **strtab;
size_t strtab_count;
size_t strtab_capacity;
+ /* chained hash table of dynamically allocated mdelems */
internal_metadata **mdtab;
size_t mdtab_count;
size_t mdtab_free;