aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/cpp/server/server.cc
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2015-12-02 11:43:40 -0800
committerGravatar Craig Tiller <ctiller@google.com>2015-12-02 11:43:40 -0800
commit8352b9e99741bc2eb92144cef2c5fc041d3dce5c (patch)
treea7ebeed74e9c903d731b1912bbbff0215dd7b9ba /src/cpp/server/server.cc
parent7221d999bb503acd733e75e374cbf7f6ac28e482 (diff)
Review feedback
Diffstat (limited to 'src/cpp/server/server.cc')
-rw-r--r--src/cpp/server/server.cc19
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;
}