| 
					
				 | 
			
			
				@@ -51,33 +51,6 @@ bool grpc_exec_ctx_has_work(grpc_exec_ctx *exec_ctx) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          !grpc_closure_list_empty(exec_ctx->closure_list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bool grpc_exec_ctx_flush(grpc_exec_ctx *exec_ctx) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  bool did_something = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_TIMER_BEGIN("grpc_exec_ctx_flush", 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  for (;;) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!grpc_closure_list_empty(exec_ctx->closure_list)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      grpc_closure *c = exec_ctx->closure_list.head; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      exec_ctx->closure_list.head = exec_ctx->closure_list.tail = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      while (c != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        grpc_closure *next = c->next_data.next; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        grpc_error *error = c->error_data.error; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        did_something = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#ifndef NDEBUG 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        c->scheduled = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        c->cb(exec_ctx, c->cb_arg, error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        GRPC_ERROR_UNREF(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        c = next; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else if (!grpc_combiner_continue_exec_ctx(exec_ctx)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(exec_ctx->active_combiner == NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_TIMER_END("grpc_exec_ctx_flush", 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return did_something; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void grpc_exec_ctx_finish(grpc_exec_ctx *exec_ctx) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   exec_ctx->flags |= GRPC_EXEC_CTX_FLAG_IS_FINISHED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_exec_ctx_flush(exec_ctx); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -103,6 +76,29 @@ static void exec_ctx_run(grpc_exec_ctx *exec_ctx, grpc_closure *closure, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GRPC_ERROR_UNREF(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bool grpc_exec_ctx_flush(grpc_exec_ctx *exec_ctx) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  bool did_something = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_TIMER_BEGIN("grpc_exec_ctx_flush", 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (;;) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!grpc_closure_list_empty(exec_ctx->closure_list)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      grpc_closure *c = exec_ctx->closure_list.head; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      exec_ctx->closure_list.head = exec_ctx->closure_list.tail = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      while (c != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        grpc_closure *next = c->next_data.next; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        grpc_error *error = c->error_data.error; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        did_something = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        exec_ctx_run(exec_ctx, c, error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        c = next; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else if (!grpc_combiner_continue_exec_ctx(exec_ctx)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(exec_ctx->active_combiner == NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_TIMER_END("grpc_exec_ctx_flush", 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return did_something; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void exec_ctx_sched(grpc_exec_ctx *exec_ctx, grpc_closure *closure, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            grpc_error *error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_closure_list_append(&exec_ctx->closure_list, closure, error); 
			 |