|  | @@ -236,7 +236,22 @@ class ConnectLoopRunner {
 | 
	
		
			
				|  |  |              << "connect_loop runner:" << std::hex << self
 | 
	
		
			
				|  |  |              << " got ev.type:" << ev.type << " i:" << i;
 | 
	
		
			
				|  |  |          ASSERT_TRUE(ev.success);
 | 
	
		
			
				|  |  | +        grpc_connectivity_state prev_state = state;
 | 
	
		
			
				|  |  |          state = grpc_channel_check_connectivity_state(channel, 1);
 | 
	
		
			
				|  |  | +        if (self->expected_connectivity_states_ ==
 | 
	
		
			
				|  |  | +                GRPC_CHANNEL_TRANSIENT_FAILURE &&
 | 
	
		
			
				|  |  | +            prev_state == GRPC_CHANNEL_CONNECTING &&
 | 
	
		
			
				|  |  | +            state == GRPC_CHANNEL_CONNECTING) {
 | 
	
		
			
				|  |  | +          // Detect a race in state checking: if the watch_connectivity_state
 | 
	
		
			
				|  |  | +          // completed from prior state "connecting", this could be because the
 | 
	
		
			
				|  |  | +          // channel momentarily entered state "transient failure", which is
 | 
	
		
			
				|  |  | +          // what we want. However, if the channel immediately re-enters
 | 
	
		
			
				|  |  | +          // "connecting" state, then the new state check might still result in
 | 
	
		
			
				|  |  | +          // "connecting". A continuous repeat of this can cause this loop to
 | 
	
		
			
				|  |  | +          // never terminate in time. So take this scenario to indicate that the
 | 
	
		
			
				|  |  | +          // channel momentarily entered transient failure.
 | 
	
		
			
				|  |  | +          break;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        grpc_channel_destroy(channel);
 | 
	
		
			
				|  |  |        grpc_completion_queue_shutdown(cq);
 |