Assign finished and canceled
diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m
index 39681d2..9d81dcf 100644
--- a/src/objective-c/GRPCClient/GRPCCall.m
+++ b/src/objective-c/GRPCClient/GRPCCall.m
@@ -143,7 +143,7 @@
     dispatch_set_target_queue(responseHandler.dispatchQueue, _dispatchQueue);
     _started = NO;
     _canceled = NO;
-    _finished = YES;
+    _finished = NO;
   }
 
   return self;
@@ -218,6 +218,7 @@
 - (void)cancel {
   dispatch_async(_dispatchQueue, ^{
     GRPCAssert(!self->_canceled, NSInternalInconsistencyException, @"Call already canceled.");
+    self->_canceled = YES;
     if (self->_call) {
       [self->_call cancel];
       self->_call = nil;
@@ -263,6 +264,7 @@
       [self->_pipe writesFinishedWithError:nil];
     }
     self->_pipe = nil;
+    self->_finished = YES;
   });
 }