diff --git a/src/core/surface/call.c b/src/core/surface/call.c
index 4affafa5850d9828a90655a2193c7b63e6070f39..84b9daaa2896ca795ad3123260a8683362c4c1bc 100644
--- a/src/core/surface/call.c
+++ b/src/core/surface/call.c
@@ -1270,6 +1270,7 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx,
         }
         if (call->receiving_message) {
           error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
+          goto done_with_error;
         }
         call->receiving_message = 1;
         bctl->recv_message = 1;