| 
					
				 | 
			
			
				@@ -79,7 +79,7 @@ static void test_wait_empty(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   shutdown_and_destroy(cc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void test_cq_end_read(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void test_cq_end_op(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_event *ev; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_completion_queue *cc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int on_finish_called = 0; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -89,94 +89,15 @@ static void test_cq_end_read(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   cc = grpc_completion_queue_create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_cq_begin_op(cc, NULL, GRPC_READ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_cq_end_read(cc, tag, NULL, increment_int_on_finish, &on_finish_called, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_cq_begin_op(cc, NULL, GRPC_OP_COMPLETE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_cq_end_op(cc, tag, NULL, increment_int_on_finish, &on_finish_called, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ev = grpc_completion_queue_next(cc, gpr_inf_past); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(ev != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->type == GRPC_READ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(ev->type == GRPC_OP_COMPLETE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(ev->tag == tag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->data.read == NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(on_finish_called == 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_event_finish(ev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(on_finish_called == 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  shutdown_and_destroy(cc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void test_cq_end_write_accepted(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_event *ev; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_completion_queue *cc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  int on_finish_called = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  void *tag = create_test_tag(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  LOG_TEST(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  cc = grpc_completion_queue_create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_cq_begin_op(cc, NULL, GRPC_WRITE_ACCEPTED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_cq_end_write_accepted(cc, tag, NULL, increment_int_on_finish, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                             &on_finish_called, GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ev = grpc_completion_queue_next(cc, gpr_inf_past); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->type == GRPC_WRITE_ACCEPTED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->tag == tag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->data.write_accepted == GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(on_finish_called == 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_event_finish(ev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(on_finish_called == 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  shutdown_and_destroy(cc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void test_cq_end_finish_accepted(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_event *ev; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_completion_queue *cc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  int on_finish_called = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  void *tag = create_test_tag(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  LOG_TEST(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  cc = grpc_completion_queue_create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_cq_begin_op(cc, NULL, GRPC_FINISH_ACCEPTED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_cq_end_finish_accepted(cc, tag, NULL, increment_int_on_finish, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              &on_finish_called, GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ev = grpc_completion_queue_next(cc, gpr_inf_past); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->type == GRPC_FINISH_ACCEPTED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->tag == tag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->data.finish_accepted == GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(on_finish_called == 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_event_finish(ev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(on_finish_called == 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  shutdown_and_destroy(cc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void test_cq_end_client_metadata_read(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_event *ev; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_completion_queue *cc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  int on_finish_called = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  void *tag = create_test_tag(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  LOG_TEST(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  cc = grpc_completion_queue_create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_cq_begin_op(cc, NULL, GRPC_CLIENT_METADATA_READ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_cq_end_client_metadata_read(cc, tag, NULL, increment_int_on_finish, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                   &on_finish_called, 0, NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ev = grpc_completion_queue_next(cc, gpr_inf_past); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->type == GRPC_CLIENT_METADATA_READ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->tag == tag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->data.client_metadata_read.count == 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(ev->data.client_metadata_read.elements == NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(ev->data.op_complete == GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(on_finish_called == 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_event_finish(ev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(on_finish_called == 1); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -203,9 +124,9 @@ static void test_pluck(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   cc = grpc_completion_queue_create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_cq_begin_op(cc, NULL, GRPC_WRITE_ACCEPTED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_cq_end_write_accepted(cc, tags[i], NULL, increment_int_on_finish, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               &on_finish_called, GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_cq_begin_op(cc, NULL, GRPC_OP_COMPLETE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_cq_end_op(cc, tags[i], NULL, increment_int_on_finish, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   &on_finish_called, GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -217,9 +138,9 @@ static void test_pluck(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(on_finish_called == GPR_ARRAY_SIZE(tags)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_cq_begin_op(cc, NULL, GRPC_WRITE_ACCEPTED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_cq_end_write_accepted(cc, tags[i], NULL, increment_int_on_finish, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               &on_finish_called, GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_cq_begin_op(cc, NULL, GRPC_OP_COMPLETE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_cq_end_op(cc, tags[i], NULL, increment_int_on_finish, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   &on_finish_called, GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -261,7 +182,7 @@ static void producer_thread(void *arg) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_log(GPR_INFO, "producer %d phase 1", opt->id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (i = 0; i < TEST_THREAD_EVENTS; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_cq_begin_op(opt->cc, NULL, GRPC_WRITE_ACCEPTED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_cq_begin_op(opt->cc, NULL, GRPC_OP_COMPLETE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_log(GPR_INFO, "producer %d phase 1 done", opt->id); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -270,8 +191,8 @@ static void producer_thread(void *arg) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_log(GPR_INFO, "producer %d phase 2", opt->id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (i = 0; i < TEST_THREAD_EVENTS; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_cq_end_write_accepted(opt->cc, (void *)(gpr_intptr) 1, NULL, NULL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               NULL, GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_cq_end_op(opt->cc, (void *)(gpr_intptr)1, NULL, NULL, NULL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     opt->events_triggered++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -298,8 +219,8 @@ static void consumer_thread(void *arg) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ev = grpc_completion_queue_next(opt->cc, ten_seconds_time()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     GPR_ASSERT(ev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     switch (ev->type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      case GRPC_WRITE_ACCEPTED: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        GPR_ASSERT(ev->data.write_accepted == GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case GRPC_OP_COMPLETE: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        GPR_ASSERT(ev->data.op_complete == GRPC_OP_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         opt->events_triggered++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         grpc_event_finish(ev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         break; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -394,10 +315,7 @@ int main(int argc, char **argv) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_iomgr_init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   test_no_op(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   test_wait_empty(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  test_cq_end_read(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  test_cq_end_write_accepted(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  test_cq_end_finish_accepted(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  test_cq_end_client_metadata_read(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  test_cq_end_op(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   test_pluck(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   test_threading(1, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   test_threading(1, 10); 
			 |