diff options
Diffstat (limited to 'src/core/ext/filters/client_channel/backup_poller.cc')
-rw-r--r-- | src/core/ext/filters/client_channel/backup_poller.cc | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/core/ext/filters/client_channel/backup_poller.cc b/src/core/ext/filters/client_channel/backup_poller.cc index ed437d255c..5b86e8631f 100644 --- a/src/core/ext/filters/client_channel/backup_poller.cc +++ b/src/core/ext/filters/client_channel/backup_poller.cc @@ -83,8 +83,8 @@ static void done_poller(grpc_exec_ctx* exec_ctx, void* arg, grpc_error* error) { } static void g_poller_unref(grpc_exec_ctx* exec_ctx) { + gpr_mu_lock(&g_poller_mu); if (gpr_unref(&g_poller->refs)) { - gpr_mu_lock(&g_poller_mu); backup_poller* p = g_poller; g_poller = nullptr; gpr_mu_unlock(&g_poller_mu); @@ -95,6 +95,8 @@ static void g_poller_unref(grpc_exec_ctx* exec_ctx) { p, grpc_schedule_on_exec_ctx)); gpr_mu_unlock(p->pollset_mu); grpc_timer_cancel(exec_ctx, &p->polling_timer); + } else { + gpr_mu_unlock(&g_poller_mu); } } |