| 
					
				 | 
			
			
				@@ -895,23 +895,45 @@ const grpc_channel_filter grpc_server_top_filter = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     "server", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void grpc_server_register_completion_queue(grpc_server *server, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                           grpc_completion_queue *cq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                           void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void register_completion_queue(grpc_server *server, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                      grpc_completion_queue *cq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                      bool is_non_listening, void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   size_t i, n; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GRPC_API_TRACE( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      "grpc_server_register_completion_queue(server=%p, cq=%p, reserved=%p)", 3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (server, cq, reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(!reserved); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (i = 0; i < server->cq_count; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (server->cqs[i] == cq) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GRPC_CQ_INTERNAL_REF(cq, "server"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_cq_mark_server_cq(cq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  n = server->cq_count++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  server->cqs = gpr_realloc(server->cqs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            server->cq_count * sizeof(grpc_completion_queue *)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  server->cqs[n] = cq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* Non-listening completion queues are not added to server->cqs */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (is_non_listening) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_cq_mark_non_listening_server_cq(cq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GRPC_CQ_INTERNAL_REF(cq, "server"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    n = server->cq_count++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    server->cqs = gpr_realloc( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server->cqs, server->cq_count * sizeof(grpc_completion_queue *)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    server->cqs[n] = cq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_server_register_completion_queue(grpc_server *server, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                           grpc_completion_queue *cq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                           void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GRPC_API_TRACE( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "grpc_server_register_completion_queue(server=%p, cq=%p, reserved=%p)", 3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (server, cq, reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  register_completion_queue(server, cq, false, reserved); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_server_register_non_listening_completion_queue( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_server *server, grpc_completion_queue *cq, void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GRPC_API_TRACE( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "grpc_server_register_non_listening_completion_queue(server=%p, cq=%p, " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "reserved=%p)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      3, (server, cq, reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  register_completion_queue(server, cq, true, reserved); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 grpc_server *grpc_server_create(const grpc_channel_args *args, void *reserved) { 
			 |