diff --git a/src/core/surface/call.c b/src/core/surface/call.c
index b2033f3dc0ea202b2621b6b14c5a70c9a57aace9..cfce943794072f8ffa04e9af4880a1f8ebe856f8 100644
--- a/src/core/surface/call.c
+++ b/src/core/surface/call.c
@@ -375,6 +375,7 @@ static void unlock(grpc_call *call) {
            sizeof(completed_requests));
     call->num_completed_requests = 0;
     call->completing = 1;
+    grpc_call_internal_ref(call);
   }
 
   if (!call->sending) {
@@ -403,6 +404,7 @@ static void unlock(grpc_call *call) {
     lock(call);
     call->completing = 0;
     unlock(call);
+    grpc_call_internal_unref(call, 0);
   }
 }