diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m
index b6a6d48d964d855ee6760d2cab8fdf69beeb12ec..508cb206444e04a343626db5d0d26315317c3f5c 100644
--- a/src/objective-c/GRPCClient/private/GRPCHost.m
+++ b/src/objective-c/GRPCClient/private/GRPCHost.m
@@ -94,12 +94,15 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (nullable grpc_call *)unmanagedCallWithPath:(NSString *)path
                               completionQueue:(GRPCCompletionQueue *)queue {
+  GRPCChannel *channel;
+  // This is racing -[GRPCHost disconnect].
   @synchronized(self) {
     if (!_channel) {
       _channel = [self newChannel];
     }
-    return [_channel unmanagedCallWithPath:path completionQueue:queue];
+    channel = _channel;
   }
+  return [channel unmanagedCallWithPath:path completionQueue:queue];
 }
 
 - (NSDictionary *)channelArgs {
@@ -136,6 +139,7 @@ NS_ASSUME_NONNULL_BEGIN
 }
 
 - (void)disconnect {
+  // This is racing -[GRPCHost unmanagedCallWithPath:completionQueue:].
   @synchronized(self) {
     _channel = nil;
   }