Fix possible deadlock in RemoveExternalConnectivityWatcher

pull/23367/head
Yash Tibrewal 4 years ago
parent 9a122e5b8b
commit 98b3d46f8f
  1. 14
      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 {

Loading…
Cancel
Save