diff --git a/src/core/ext/filters/client_channel/client_channel.cc b/src/core/ext/filters/client_channel/client_channel.cc index d8af25d8f2f..9cd757658aa 100644 --- a/src/core/ext/filters/client_channel/client_channel.cc +++ b/src/core/ext/filters/client_channel/client_channel.cc @@ -179,12 +179,16 @@ class ChannelData { void RemoveExternalConnectivityWatcher(grpc_closure* on_complete, bool cancel) { - MutexLock lock(&external_watchers_mu_); - auto it = external_watchers_.find(on_complete); - if (it != external_watchers_.end()) { - if (cancel) it->second->Cancel(); - external_watchers_.erase(it); + ExternalConnectivityWatcher* watcher = nullptr; + { + MutexLock lock(&external_watchers_mu_); + auto it = external_watchers_.find(on_complete); + if (it != external_watchers_.end()) { + watcher = it->second; + external_watchers_.erase(it); + } } + if (watcher != nullptr && cancel) watcher->Cancel(); } int NumExternalConnectivityWatchers() const {