| 
					
				 | 
			
			
				@@ -542,7 +542,7 @@ static void pollset_maybe_finish_shutdown(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static grpc_error *pollset_kick_one(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     grpc_pollset_worker *specific_worker) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  pollable *p = pollset->active_pollable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  pollable *p = specific_worker->pollable_obj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 GPR_ASSERT(specific_worker != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (specific_worker->kicked) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (GRPC_TRACER_ON(grpc_polling_trace)) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -563,6 +563,7 @@ GPR_ASSERT(specific_worker != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     specific_worker->kicked = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return grpc_wakeup_fd_wakeup(&p->wakeup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GPR_ASSERT(specific_worker->initialized_cv); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (GRPC_TRACER_ON(grpc_polling_trace)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       gpr_log(GPR_DEBUG, "PS:%p kicked_specific_via_cv", p); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -577,20 +578,17 @@ GPR_ASSERT(specific_worker != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static grpc_error *pollset_kick_inner(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       grpc_pollset_worker *specific_worker) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  pollable *p = pollset->active_pollable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (GRPC_TRACER_ON(grpc_polling_trace)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gpr_log(GPR_DEBUG, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            "PS:%p kick %p tls_pollset=%p tls_worker=%p " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            "root_worker=(pollset:%p pollable:%p)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            p, specific_worker, (void *)gpr_tls_get(&g_current_thread_pollset), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (void *)gpr_tls_get(&g_current_thread_worker), pollset->root_worker, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            p->root_worker); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "PS:%p kick %p tls_pollset=%p tls_worker=%p pollset.root_worker=%p", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pollset, specific_worker, (void *)gpr_tls_get(&g_current_thread_pollset), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            (void *)gpr_tls_get(&g_current_thread_worker), pollset->root_worker); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (specific_worker == NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (gpr_tls_get(&g_current_thread_pollset) != (intptr_t)pollset) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (pollset->root_worker == NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (GRPC_TRACER_ON(grpc_polling_trace)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          gpr_log(GPR_DEBUG, "PS:%p kicked_any_without_poller", p); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          gpr_log(GPR_DEBUG, "PS:%p kicked_any_without_poller", pollset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         pollset->kicked_without_poller = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return GRPC_ERROR_NONE; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -599,7 +597,7 @@ static grpc_error *pollset_kick_inner(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (GRPC_TRACER_ON(grpc_polling_trace)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        gpr_log(GPR_DEBUG, "PS:%p kicked_any_but_awake", p); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        gpr_log(GPR_DEBUG, "PS:%p kicked_any_but_awake", pollset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return GRPC_ERROR_NONE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -905,9 +903,11 @@ static void end_worker(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (worker->initialized_cv) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gpr_cv_destroy(&worker->cv); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_mu_unlock(&worker->pollable_obj->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (worker_remove(&pollset->root_worker, worker, PWLINK_POLLSET)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  gpr_mu_unlock(&worker->pollable_obj->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     pollset_maybe_finish_shutdown(exec_ctx, pollset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  gpr_mu_unlock(&worker->pollable_obj->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   POLLABLE_UNREF(worker->pollable_obj, "pollset_worker"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |