diff --git a/src/core/surface/call.c b/src/core/surface/call.c
index 5d064ef00d0860e461bdb326e4f89a4b88a84b5a..a32cb93b34539d76cc34a154f328d500256ee96a 100644
--- a/src/core/surface/call.c
+++ b/src/core/surface/call.c
@@ -1123,7 +1123,8 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx,
     }
     gpr_mu_unlock(&call->mu);
     post_batch_completion(exec_ctx, bctl);
-    return GRPC_CALL_OK;
+    error = GRPC_CALL_OK;
+    goto done;
   }
 
   /* rewrite batch ops into a transport op */