|  | @@ -58,13 +58,12 @@ class DefaultGlobalCallbacks GRPC_FINAL : public Server::GlobalCallbacks {
 | 
	
		
			
				|  |  |    void PostSynchronousRequest(ServerContext* context) GRPC_OVERRIDE {}
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static Server::GlobalCallbacks* g_callbacks = nullptr;
 | 
	
		
			
				|  |  | +static std::shared_ptr<Server::GlobalCallbacks> g_callbacks = nullptr;
 | 
	
		
			
				|  |  |  static gpr_once g_once_init_callbacks = GPR_ONCE_INIT;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static void InitGlobalCallbacks() {
 | 
	
		
			
				|  |  |    if (g_callbacks == nullptr) {
 | 
	
		
			
				|  |  | -    static DefaultGlobalCallbacks default_global_callbacks;
 | 
	
		
			
				|  |  | -    g_callbacks = &default_global_callbacks;
 | 
	
		
			
				|  |  | +    g_callbacks.reset(new DefaultGlobalCallbacks());
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -235,12 +234,12 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag {
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    void Run() {
 | 
	
		
			
				|  |  | +    void Run(std::shared_ptr<GlobalCallbacks> global_callbacks) {
 | 
	
		
			
				|  |  |        ctx_.BeginCompletionOp(&call_);
 | 
	
		
			
				|  |  | -      g_callbacks->PreSynchronousRequest(&ctx_);
 | 
	
		
			
				|  |  | +      global_callbacks->PreSynchronousRequest(&ctx_);
 | 
	
		
			
				|  |  |        method_->handler()->RunHandler(MethodHandler::HandlerParameter(
 | 
	
		
			
				|  |  |            &call_, &ctx_, request_payload_, call_.max_message_size()));
 | 
	
		
			
				|  |  | -      g_callbacks->PostSynchronousRequest(&ctx_);
 | 
	
		
			
				|  |  | +      global_callbacks->PostSynchronousRequest(&ctx_);
 | 
	
		
			
				|  |  |        request_payload_ = nullptr;
 | 
	
		
			
				|  |  |        void* ignored_tag;
 | 
	
		
			
				|  |  |        bool ignored_ok;
 | 
	
	
		
			
				|  | @@ -288,6 +287,7 @@ Server::Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned,
 | 
	
		
			
				|  |  |        thread_pool_(thread_pool),
 | 
	
		
			
				|  |  |        thread_pool_owned_(thread_pool_owned) {
 | 
	
		
			
				|  |  |    gpr_once_init(&g_once_init_callbacks, InitGlobalCallbacks);
 | 
	
		
			
				|  |  | +  global_callbacks_ = g_callbacks;
 | 
	
		
			
				|  |  |    grpc_server_register_completion_queue(server_, cq_.cq(), nullptr);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -312,7 +312,7 @@ Server::~Server() {
 | 
	
		
			
				|  |  |  void Server::SetGlobalCallbacks(GlobalCallbacks* callbacks) {
 | 
	
		
			
				|  |  |    GPR_ASSERT(g_callbacks == nullptr);
 | 
	
		
			
				|  |  |    GPR_ASSERT(callbacks != nullptr);
 | 
	
		
			
				|  |  | -  g_callbacks = callbacks;
 | 
	
		
			
				|  |  | +  g_callbacks.reset(callbacks);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  bool Server::RegisterService(const grpc::string* host, RpcService* service) {
 | 
	
	
		
			
				|  | @@ -570,7 +570,7 @@ void Server::RunRpc() {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        GPR_TIMER_SCOPE("cd.Run()", 0);
 | 
	
		
			
				|  |  | -      cd.Run();
 | 
	
		
			
				|  |  | +      cd.Run(global_callbacks_);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 |