| 
					
				 | 
			
			
				@@ -207,7 +207,6 @@ static void unary_poll_do_promote(void *args, int success) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_pollset *pollset = up_args->pollset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_fd *fd = up_args->fd; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int do_shutdown_cb = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_free(up_args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * This is quite tricky. There are a number of cases to keep in mind here: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -222,8 +221,12 @@ static void unary_poll_do_promote(void *args, int success) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* First we need to ensure that nobody is polling concurrently */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   while (pollset->counter != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_pollset_kick(pollset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    gpr_cv_wait(&pollset->cv, &pollset->mu, gpr_inf_future); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_iomgr_add_callback(unary_poll_do_promote, up_args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    gpr_mu_unlock(&pollset->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  gpr_free(up_args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* At this point the pollset may no longer be a unary poller. In that case 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * we should just call the right add function and be done. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* TODO(klempner): If we're not careful this could cause infinite recursion. 
			 |