diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c
index 369ff0ad7f6e5437e3d656b9fb442f28bd2dc1d2..cf1dbfa0e593b6ddb964d808635d20a00fba9ad7 100644
--- a/src/core/transport/chttp2_transport.c
+++ b/src/core/transport/chttp2_transport.c
@@ -1006,8 +1006,9 @@ static void perform_transport_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
 
   lock(t);
 
-  /* Let's be overly cautious: don't change any state while we're parsing */
-  if (t->parsing_active) {
+  /* If there's a set_accept_stream ensure that we're not parsing
+     to avoid changing things out from underneath */
+  if (t->parsing_active && t->set_accept_stream) {
     GPR_ASSERT(t->post_parsing_op == NULL);
     t->post_parsing_op = gpr_malloc(sizeof(*op));
     memcpy(t->post_parsing_op, op, sizeof(*op));
diff --git a/src/core/transport/transport.h b/src/core/transport/transport.h
index 5a90bd6d387a3937405107037ec5c4d149b1c270..ed6e121c9cbb685e4b7e109a7f92110320f9c424 100644
--- a/src/core/transport/transport.h
+++ b/src/core/transport/transport.h
@@ -123,8 +123,7 @@ typedef struct grpc_transport_stream_op {
 
 /** Transport op: a set of operations to perform on a transport as a whole */
 typedef struct grpc_transport_op {
-  /** Called when processing of this op is done.
-      Only one transport_op is allowed to be outstanding at any time. */
+  /** Called when processing of this op is done. */
   grpc_closure *on_consumed;
   /** connectivity monitoring - set connectivity_state to NULL to unsubscribe */
   grpc_closure *on_connectivity_state_change;