Thread safety fix
diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c
index 6dd8f0c..9f90056 100644
--- a/src/core/transport/chttp2_transport.c
+++ b/src/core/transport/chttp2_transport.c
@@ -317,6 +317,7 @@
grpc_linked_mdelem *incoming_metadata;
size_t incoming_metadata_count;
size_t incoming_metadata_capacity;
+ grpc_linked_mdelem *old_incoming_metadata;
gpr_timespec incoming_deadline;
/* sops from application */
@@ -669,6 +670,7 @@
grpc_mdelem_unref(s->incoming_metadata[i].md);
}
gpr_free(s->incoming_metadata);
+ gpr_free(s->old_incoming_metadata);
unref_transport(t);
}
@@ -1059,6 +1061,8 @@
s->incoming_sopb = op->recv_ops;
s->incoming_sopb->nops = 0;
s->publish_state = op->recv_state;
+ gpr_free(s->old_incoming_metadata);
+ s->old_incoming_metadata = NULL;
maybe_finish_read(t, s);
maybe_join_window_updates(t, s);
}
@@ -1904,8 +1908,10 @@
mdidx = last_mdidx;
}
GPR_ASSERT(mdidx == s->incoming_metadata_count);
-
+ s->old_incoming_metadata = s->incoming_metadata;
+ s->incoming_metadata = NULL;
s->incoming_metadata_count = 0;
+ s->incoming_metadata_capacity = 0;
}
static void finish_reads(transport *t) {