diff --git a/src/core/ext/filters/client_channel/client_channel.cc b/src/core/ext/filters/client_channel/client_channel.cc index f652a6113e6..43a3688e2ab 100644 --- a/src/core/ext/filters/client_channel/client_channel.cc +++ b/src/core/ext/filters/client_channel/client_channel.cc @@ -177,7 +177,9 @@ class ChannelData { MutexLock lock(&external_watchers_mu_); // Will be deleted when the watch is complete. GPR_ASSERT(external_watchers_[on_complete] == nullptr); - // Pass a ref to the external_watchers_ map. + // Pass a ref to the external_watchers_ map. We are taking an additional + // ref on the watcher so that we can maintain lifetime guarantees when + // watcher->Start() is called after the critical section. external_watchers_[on_complete] = watcher; } watcher->Start();