diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index bbfb5aa45f36229ce75c3c04b0ff1b465cee8171..e5a90f2caece85fd06c0a5ff36e7aabeba85a38a 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -382,7 +382,7 @@ static NSMutableDictionary *callFlags; [NSException raise:NSInvalidArgumentException format:@"host of %@ is nil", _host]; } __weak typeof(self) weakSelf = self; - _connectivityMonitor = [GRPCConnectivityMonitor monitorWithHost:host]; + _connectivityMonitor = [GRPCConnectivityMonitor monitorWithHost:host]; void (^handler)() = ^{ typeof(self) strongSelf = weakSelf; if (strongSelf) { diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m index 2c5f21684d91cd617b4124079b007459c5d14525..8376744e289b26f3b726942d3302ba77cd5e7e2b 100644 --- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m +++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m @@ -153,14 +153,18 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target, - (void)handleLossWithHandler:(void (^)())handler wifiStatusChangeHandler:(nonnull void (^)())wifiStatusChangeHandler { + __weak typeof(self) weakSelf = self; [self startListeningWithHandler:^(GRPCReachabilityFlags *flags) { - if (!flags.reachable) { - handler(); - } else if (!_previousReachabilityFlags || - (flags.isWWAN ^ _previousReachabilityFlags.isWWAN)) { - wifiStatusChangeHandler(); + typeof(self) strongSelf = weakSelf; + if (strongSelf) { + if (!flags.reachable) { + handler(); + } else if (strongSelf->_previousReachabilityFlags && + (flags.isWWAN ^ strongSelf->_previousReachabilityFlags.isWWAN)) { + wifiStatusChangeHandler(); + } + strongSelf->_previousReachabilityFlags = flags; } - _previousReachabilityFlags = flags; }]; }