|  | @@ -45,12 +45,22 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  namespace grpc {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +class DefaultGlobalCallbacks GRPC_FINAL : public ClientContext::GlobalCallbacks {
 | 
	
		
			
				|  |  | + public:
 | 
	
		
			
				|  |  | +  void DefaultConstructor(ClientContext* context) GRPC_OVERRIDE {}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static DefaultGlobalCallbacks g_default_callbacks;
 | 
	
		
			
				|  |  | +static ClientContext::GlobalCallbacks* g_callbacks = &g_default_callbacks;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  ClientContext::ClientContext()
 | 
	
		
			
				|  |  |      : initial_metadata_received_(false),
 | 
	
		
			
				|  |  |        call_(nullptr),
 | 
	
		
			
				|  |  |        call_canceled_(false),
 | 
	
		
			
				|  |  |        deadline_(gpr_inf_future(GPR_CLOCK_REALTIME)),
 | 
	
		
			
				|  |  | -      propagate_from_call_(nullptr) {}
 | 
	
		
			
				|  |  | +      propagate_from_call_(nullptr) {
 | 
	
		
			
				|  |  | +  g_callbacks->DefaultConstructor(this);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  ClientContext::~ClientContext() {
 | 
	
		
			
				|  |  |    if (call_) {
 | 
	
	
		
			
				|  | @@ -124,4 +134,11 @@ grpc::string ClientContext::peer() const {
 | 
	
		
			
				|  |  |    return peer;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +void ClientContext::SetGlobalCallbacks(GlobalCallbacks* callbacks) {
 | 
	
		
			
				|  |  | +  GPR_ASSERT(g_callbacks == &g_default_callbacks);
 | 
	
		
			
				|  |  | +  GPR_ASSERT(callbacks != NULL);
 | 
	
		
			
				|  |  | +  GPR_ASSERT(callbacks != &g_default_callbacks);
 | 
	
		
			
				|  |  | +  g_callbacks = callbacks;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  }  // namespace grpc
 |