| 
					
				 | 
			
			
				@@ -65,6 +65,7 @@ class CompletionQueue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class Server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class ServerBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class ServerContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class ServerInterface; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 namespace internal { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class CompletionQueueTag; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -187,21 +188,6 @@ class CompletionQueue : private GrpcLibraryCodegen { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /// owership is performed. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_completion_queue* cq() { return cq_; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// Manage state of avalanching operations : completion queue tags that 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// trigger other completion queue operations. The underlying core completion 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// queue should not really shutdown until all avalanching operations have 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// been finalized. Note that we maintain the requirement that an avalanche 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// registration must take place before CQ shutdown (which must be maintained 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// elsehwere) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  void InitialAvalanching() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    gpr_atm_rel_store(&avalanches_in_flight_, static_cast<gpr_atm>(1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  void RegisterAvalanching() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    gpr_atm_no_barrier_fetch_add(&avalanches_in_flight_, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                 static_cast<gpr_atm>(1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  void CompleteAvalanching(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  protected: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /// Private constructor of CompletionQueue only visible to friend classes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   CompletionQueue(const grpc_completion_queue_attributes& attributes) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -238,6 +224,7 @@ class CompletionQueue : private GrpcLibraryCodegen { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   friend class ::grpc::internal::UnknownMethodHandler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   friend class ::grpc::Server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   friend class ::grpc::ServerContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  friend class ::grpc::ServerInterface; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   template <class InputMessage, class OutputMessage> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   friend class ::grpc::internal::BlockingUnaryCallImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -309,6 +296,21 @@ class CompletionQueue : private GrpcLibraryCodegen { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     GPR_CODEGEN_ASSERT(!tag->FinalizeResult(&ignored, &ok)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// Manage state of avalanching operations : completion queue tags that 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// trigger other completion queue operations. The underlying core completion 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// queue should not really shutdown until all avalanching operations have 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// been finalized. Note that we maintain the requirement that an avalanche 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// registration must take place before CQ shutdown (which must be maintained 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// elsehwere) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  void InitialAvalanching() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    gpr_atm_rel_store(&avalanches_in_flight_, static_cast<gpr_atm>(1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  void RegisterAvalanching() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    gpr_atm_no_barrier_fetch_add(&avalanches_in_flight_, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 static_cast<gpr_atm>(1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  void CompleteAvalanching(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_completion_queue* cq_;  // owned 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_atm avalanches_in_flight_; 
			 |