From 7f58f5d1cbac621c6514d76f672b086918a8cdd8 Mon Sep 17 00:00:00 2001
From: Craig Tiller <ctiller@google.com>
Date: Mon, 26 Sep 2016 17:18:08 -0700
Subject: [PATCH] Progress on chttp2 integration

---
 .../ext/transport/chttp2/transport/chttp2_transport.c |  1 +
 src/core/ext/transport/chttp2/transport/stream_map.c  | 11 +++++++++++
 2 files changed, 12 insertions(+)

diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
index fcfe6e2955..7a9a13de6b 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
@@ -1339,6 +1339,7 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
   if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
     if (!t->benign_reclaimer_registered) {
       t->benign_reclaimer_registered = true;
+      GRPC_CHTTP2_REF_TRANSPORT(t, "benign_reclaimer");
       grpc_buffer_user_post_reclaimer(exec_ctx,
                                       grpc_endpoint_get_buffer_user(t->ep),
                                       false, &t->benign_reclaimer);
diff --git a/src/core/ext/transport/chttp2/transport/stream_map.c b/src/core/ext/transport/chttp2/transport/stream_map.c
index 59b3a14e0a..5f5a28446d 100644
--- a/src/core/ext/transport/chttp2/transport/stream_map.c
+++ b/src/core/ext/transport/chttp2/transport/stream_map.c
@@ -151,6 +151,17 @@ size_t grpc_chttp2_stream_map_size(grpc_chttp2_stream_map *map) {
   return map->count - map->free;
 }
 
+void *grpc_chttp2_stream_map_rand(grpc_chttp2_stream_map *map) {
+  if (map->count == map->free) {
+    return NULL;
+  }
+  if (map->free != 0) {
+    map->count = compact(map->keys, map->values, map->count);
+    map->free = 0;
+  }
+  return map->values[((size_t)rand()) % map->count];
+}
+
 void grpc_chttp2_stream_map_for_each(grpc_chttp2_stream_map *map,
                                      void (*f)(void *user_data, uint32_t key,
                                                void *value),
-- 
GitLab