From 9a0db888855e0905946ab476892ba697a6a9200d Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 6 Nov 2017 16:47:33 -0800 Subject: [PATCH 1/2] Fix TSAN issue in backup poller --- src/core/ext/filters/client_channel/backup_poller.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/core/ext/filters/client_channel/backup_poller.cc b/src/core/ext/filters/client_channel/backup_poller.cc index 466bf86bc00..45b2464e27c 100644 --- a/src/core/ext/filters/client_channel/backup_poller.cc +++ b/src/core/ext/filters/client_channel/backup_poller.cc @@ -143,9 +143,16 @@ void grpc_client_channel_start_backup_polling( grpc_exec_ctx_now(exec_ctx) + g_poll_interval_ms, &g_poller->run_poller_closure); } + gpr_ref(&g_poller->refs); + /* Get a reference to g_poller->pollset before releasing g_poller_mu to make + * TSAN happy. Otherwise, reading from g_poller (i.e g_poller->pollset) after + * releasing the lock and setting g_poller to NULL in g_poller_unref() is + * being flagged as a data-race by TSAN */ + grpc_pollset *pollset = g_poller->pollset; gpr_mu_unlock(&g_poller_mu); - grpc_pollset_set_add_pollset(exec_ctx, interested_parties, g_poller->pollset); + + grpc_pollset_set_add_pollset(exec_ctx, interested_parties, pollset); } void grpc_client_channel_stop_backup_polling( From 096f883e5e4e2b76c2892d5c29a8ad48dc12dab1 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Wed, 8 Nov 2017 14:30:41 -0800 Subject: [PATCH 2/2] clang format --- src/core/ext/filters/client_channel/backup_poller.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/ext/filters/client_channel/backup_poller.cc b/src/core/ext/filters/client_channel/backup_poller.cc index 45b2464e27c..c3795c35c1f 100644 --- a/src/core/ext/filters/client_channel/backup_poller.cc +++ b/src/core/ext/filters/client_channel/backup_poller.cc @@ -149,7 +149,7 @@ void grpc_client_channel_start_backup_polling( * TSAN happy. Otherwise, reading from g_poller (i.e g_poller->pollset) after * releasing the lock and setting g_poller to NULL in g_poller_unref() is * being flagged as a data-race by TSAN */ - grpc_pollset *pollset = g_poller->pollset; + grpc_pollset* pollset = g_poller->pollset; gpr_mu_unlock(&g_poller_mu); grpc_pollset_set_add_pollset(exec_ctx, interested_parties, pollset);