| 
					
				 | 
			
			
				@@ -64,6 +64,10 @@ typedef struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 struct grpc_completion_queue { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /** owned by pollset */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu *mu; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_cq_completion_type completion_type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_cq_polling_type polling_type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /** completed events */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_cq_completion completed_head; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_cq_completion *completed_tail; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -79,6 +83,7 @@ struct grpc_completion_queue { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int shutdown_called; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int is_server_cq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /** Can the server cq accept incoming channels */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* TODO: sreek - This will no longer be needed. Use polling_type set */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int is_non_listening_server_cq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int num_pluckers; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   plucker pluckers[GRPC_MAX_COMPLETION_QUEUE_PLUCKERS]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -110,7 +115,9 @@ int grpc_cq_event_timeout_trace; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void on_pollset_shutdown_done(grpc_exec_ctx *exec_ctx, void *cc, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                      grpc_error *error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-grpc_completion_queue *grpc_completion_queue_create(void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_completion_queue *grpc_completion_queue_create_ex( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_cq_completion_type completion_type, grpc_cq_polling_type polling_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_completion_queue *cc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(!reserved); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -148,6 +155,10 @@ grpc_completion_queue *grpc_completion_queue_create(void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return cc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+grpc_completion_queue *grpc_completion_queue_create(void *reserved) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return grpc_completion_queue_create_ex(0, DEFAULT_POLLING, reserved); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef GRPC_CQ_REF_COUNT_DEBUG 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void grpc_cq_internal_ref(grpc_completion_queue *cc, const char *reason, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                           const char *file, int line) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -356,8 +367,9 @@ grpc_event grpc_completion_queue_next(grpc_completion_queue *cc, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "deadline=gpr_timespec { tv_sec: %" PRId64 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ", tv_nsec: %d, clock_type: %d }, " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "reserved=%p)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      5, (cc, deadline.tv_sec, deadline.tv_nsec, (int)deadline.clock_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (cc, deadline.tv_sec, deadline.tv_nsec, (int)deadline.clock_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(!reserved); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   dump_pending_tags(cc); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -524,8 +536,9 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         "deadline=gpr_timespec { tv_sec: %" PRId64 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ", tv_nsec: %d, clock_type: %d }, " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         "reserved=%p)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        6, (cc, tag, deadline.tv_sec, deadline.tv_nsec, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (int)deadline.clock_type, reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (cc, tag, deadline.tv_sec, deadline.tv_nsec, (int)deadline.clock_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         reserved)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(!reserved); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -681,10 +694,14 @@ grpc_completion_queue *grpc_cq_from_pollset(grpc_pollset *ps) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void grpc_cq_mark_non_listening_server_cq(grpc_completion_queue *cc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* TODO: sreek - use cc->polling_type field here and add a validation check 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     (i.e grpc_cq_mark_non_listening_server_cq can only be called on a cc whose 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     polling_type is set to NON_LISTENING */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   cc->is_non_listening_server_cq = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 bool grpc_cq_is_non_listening_server_cq(grpc_completion_queue *cc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* TODO (sreek) - return (cc->polling_type == NON_LISTENING) */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return (cc->is_non_listening_server_cq == 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |