diff options
author | Muxi Yan <muxi@users.noreply.github.com> | 2018-08-10 15:24:44 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-10 15:24:44 -0700 |
commit | d1a17392a31c487c5dd126563238e41d1c00aa03 (patch) | |
tree | e17b2abec03a06293dded32460585efad1d8a19c | |
parent | f3839c8a25bc44ea9dcc7e89396e14f90f13a3e9 (diff) | |
parent | 8a8f33928f906208e9d3ed128e367aa6481b8507 (diff) |
Merge pull request #16213 from muxi/fix-ios8-con-mon
Fix GRPCCall refcounting issue
-rw-r--r-- | src/objective-c/GRPCClient/GRPCCall.m | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index 9783b06440..8ce88c7db2 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -220,17 +220,16 @@ static NSString *const kBearerPrefix = @"Bearer "; } - (void)cancel { - [self - maybeFinishWithError:[NSError - errorWithDomain:kGRPCErrorDomain - code:GRPCErrorCodeCancelled - userInfo:@{NSLocalizedDescriptionKey : @"Canceled by app"}]]; - if (!self.isWaitingForToken) { [self cancelCall]; } else { self.isWaitingForToken = NO; } + [self + maybeFinishWithError:[NSError + errorWithDomain:kGRPCErrorDomain + code:GRPCErrorCodeCancelled + userInfo:@{NSLocalizedDescriptionKey : @"Canceled by app"}]]; } - (void)maybeFinishWithError:(NSError *)errorOrNil { @@ -292,6 +291,7 @@ static NSString *const kBearerPrefix = @"Bearer "; // don't want to throw, because the app shouldn't crash for a behavior // that's on the hands of any server to have. Instead we finish and ask // the server to cancel. + [strongSelf cancelCall]; [strongSelf maybeFinishWithError:[NSError errorWithDomain:kGRPCErrorDomain code:GRPCErrorCodeResourceExhausted @@ -300,7 +300,6 @@ static NSString *const kBearerPrefix = @"Bearer "; @"Client does not have enough memory to " @"hold the server response." }]]; - [strongSelf cancelCall]; return; } [strongWriteable enqueueValue:data @@ -530,13 +529,17 @@ static NSString *const kBearerPrefix = @"Bearer "; } - (void)connectivityChanged:(NSNotification *)note { - [self maybeFinishWithError:[NSError errorWithDomain:kGRPCErrorDomain + // Cancel underlying call upon this notification + __strong GRPCCall *strongSelf = self; + if (strongSelf) { + [self cancelCall]; + [self + maybeFinishWithError:[NSError errorWithDomain:kGRPCErrorDomain code:GRPCErrorCodeUnavailable userInfo:@{ NSLocalizedDescriptionKey : @"Connectivity lost." }]]; - // Cancel underlying call upon this notification - [self cancelCall]; + } } @end |