|  | @@ -114,6 +114,7 @@ static void on_writable(void *acp, int success) {
 | 
	
		
			
				|  |  |    void (*cb)(void *arg, grpc_endpoint *tcp) = ac->cb;
 | 
	
		
			
				|  |  |    void *cb_arg = ac->cb_arg;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  gpr_mu_lock(&ac->mu);
 | 
	
		
			
				|  |  |    if (success) {
 | 
	
		
			
				|  |  |      do {
 | 
	
		
			
				|  |  |        so_error_size = sizeof(so_error);
 | 
	
	
		
			
				|  | @@ -139,6 +140,7 @@ static void on_writable(void *acp, int success) {
 | 
	
		
			
				|  |  |             opened too many network connections.  The "easy" fix:
 | 
	
		
			
				|  |  |             don't do that! */
 | 
	
		
			
				|  |  |          gpr_log(GPR_ERROR, "kernel out of buffers");
 | 
	
		
			
				|  |  | +        gpr_mu_unlock(&ac->mu);
 | 
	
		
			
				|  |  |          grpc_fd_notify_on_write(ac->fd, &ac->write_closure);
 | 
	
		
			
				|  |  |          return;
 | 
	
		
			
				|  |  |        } else {
 | 
	
	
		
			
				|  | @@ -165,10 +167,11 @@ static void on_writable(void *acp, int success) {
 | 
	
		
			
				|  |  |    abort();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  finish:
 | 
	
		
			
				|  |  | -  gpr_mu_lock(&ac->mu);
 | 
	
		
			
				|  |  | -  if (!ep) {
 | 
	
		
			
				|  |  | +  if (ep == NULL) {
 | 
	
		
			
				|  |  |      grpc_pollset_set_del_fd(ac->interested_parties, ac->fd);
 | 
	
		
			
				|  |  |      grpc_fd_orphan(ac->fd, NULL, "tcp_client_orphan");
 | 
	
		
			
				|  |  | +  } else {
 | 
	
		
			
				|  |  | +    ac->fd = NULL;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    done = (--ac->refs == 0);
 | 
	
		
			
				|  |  |    gpr_mu_unlock(&ac->mu);
 |