diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c
index ea24796f350e046a43db574d261ba3f6f544ac47..a6f9f782a1890d3c26d1b335cd6fb3bddf8a5b83 100644
--- a/src/core/transport/chttp2_transport.c
+++ b/src/core/transport/chttp2_transport.c
@@ -1927,8 +1927,10 @@ static void recv_data(void *tp, gpr_slice *slices, size_t nslices,
       break;
     case GRPC_ENDPOINT_CB_OK:
       lock(t);
-      for (i = 0; i < nslices && process_read(t, slices[i]); i++)
-        ;
+      if (t->cb) {
+        for (i = 0; i < nslices && process_read(t, slices[i]); i++)
+          ;
+      }
       unlock(t);
       keep_reading = 1;
       break;