diff options
author | 2015-12-02 11:43:40 -0800 | |
---|---|---|
committer | 2015-12-02 11:43:40 -0800 | |
commit | 8352b9e99741bc2eb92144cef2c5fc041d3dce5c (patch) | |
tree | a7ebeed74e9c903d731b1912bbbff0215dd7b9ba /src/cpp/server/server.cc | |
parent | 7221d999bb503acd733e75e374cbf7f6ac28e482 (diff) |
Review feedback
Diffstat (limited to 'src/cpp/server/server.cc')
-rw-r--r-- | src/cpp/server/server.cc | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index 7b51c56f0d..cc52c98b17 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -57,8 +57,17 @@ class DefaultGlobalCallbacks GRPC_FINAL : public Server::GlobalCallbacks { void PostSynchronousRequest(ServerContext* context) GRPC_OVERRIDE {} }; -static DefaultGlobalCallbacks g_default_callbacks; -static Server::GlobalCallbacks* g_callbacks = &g_default_callbacks; +static Server::GlobalCallbacks* g_callbacks = nullptr; +static gpr_once g_once_init_callbacks = GPR_ONCE_INIT; + +static void DeleteGlobalCallbacks() { delete g_callbacks; } + +static void InitGlobalCallbacks() { + if (g_callbacks == nullptr) { + g_callbacks = new DefaultGlobalCallbacks(); + atexit(DeleteGlobalCallbacks); + } +} class Server::UnimplementedAsyncRequestContext { protected: @@ -294,6 +303,7 @@ Server::Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned, server_(CreateServer(max_message_size, compression_options)), thread_pool_(thread_pool), thread_pool_owned_(thread_pool_owned) { + gpr_once_init(&g_once_init_callbacks, InitGlobalCallbacks); grpc_server_register_completion_queue(server_, cq_.cq(), nullptr); } @@ -316,9 +326,8 @@ Server::~Server() { } void Server::SetGlobalCallbacks(GlobalCallbacks* callbacks) { - GPR_ASSERT(g_callbacks == &g_default_callbacks); - GPR_ASSERT(callbacks != NULL); - GPR_ASSERT(callbacks != &g_default_callbacks); + GPR_ASSERT(g_callbacks == nullptr); + GPR_ASSERT(callbacks != nullptr); g_callbacks = callbacks; } |