From 5b7f0532ac6fba1366ee7ddfa83d83894650503d Mon Sep 17 00:00:00 2001 From: Vijay Pai Date: Mon, 28 Jan 2019 11:32:32 -0800 Subject: [PATCH] Properly init TLS for callback exec context --- src/core/lib/iomgr/exec_ctx.h | 6 ++++++ src/core/lib/surface/init.cc | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/core/lib/iomgr/exec_ctx.h b/src/core/lib/iomgr/exec_ctx.h index c6c30d3129e..16ac14ba6c5 100644 --- a/src/core/lib/iomgr/exec_ctx.h +++ b/src/core/lib/iomgr/exec_ctx.h @@ -271,6 +271,12 @@ class ApplicationCallbackExecCtx { ctx->tail_ = functor; } + /** Global initialization for ApplicationCallbackExecCtx. Called by init. */ + static void GlobalInit(void) { gpr_tls_init(&callback_exec_ctx_); } + + /** Global shutdown for ApplicationCallbackExecCtx. Called by init. */ + static void GlobalShutdown(void) { gpr_tls_destroy(&callback_exec_ctx_); } + private: grpc_experimental_completion_queue_functor* head_{nullptr}; grpc_experimental_completion_queue_functor* tail_{nullptr}; diff --git a/src/core/lib/surface/init.cc b/src/core/lib/surface/init.cc index 60f506ef5e2..f704a64b1c9 100644 --- a/src/core/lib/surface/init.cc +++ b/src/core/lib/surface/init.cc @@ -130,6 +130,7 @@ void grpc_init(void) { grpc_channel_init_init(); grpc_core::channelz::ChannelzRegistry::Init(); grpc_security_pre_init(); + grpc_core::ApplicationCallbackExecCtx::GlobalInit(); grpc_core::ExecCtx::GlobalInit(); grpc_iomgr_init(); gpr_timers_global_init(); @@ -183,6 +184,7 @@ void grpc_shutdown(void) { grpc_core::Fork::GlobalShutdown(); } grpc_core::ExecCtx::GlobalShutdown(); + grpc_core::ApplicationCallbackExecCtx::GlobalShutdown(); } gpr_mu_unlock(&g_init_mu); }