| 
					
				 | 
			
			
				@@ -168,21 +168,23 @@ retry: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void subchannel_ready(grpc_exec_ctx *exec_ctx, void *arg, bool success) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_subchannel_call_holder *holder = arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_subchannel_call *call; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_lock(&holder->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(holder->creation_phase == 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              GRPC_SUBCHANNEL_CALL_HOLDER_PICKING_SUBCHANNEL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  call = GET_CALL(holder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(call == NULL || call == CANCELLED_CALL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   holder->creation_phase = GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (holder->connected_subchannel == NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     fail_locked(exec_ctx, holder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    gpr_atm_rel_store( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        &holder->subchannel_call, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        (gpr_atm)(uintptr_t)grpc_connected_subchannel_create_call( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            exec_ctx, holder->connected_subchannel, holder->pollset)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    retry_waiting_locked(exec_ctx, holder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!gpr_atm_rel_cas( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            &holder->subchannel_call, 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            (gpr_atm)(uintptr_t)grpc_connected_subchannel_create_call( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                exec_ctx, holder->connected_subchannel, holder->pollset))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      GPR_ASSERT(gpr_atm_acq_load(&holder->subchannel_call) == 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      /* if this cas fails, the call was cancelled before the pick completed */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fail_locked(exec_ctx, holder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      retry_waiting_locked(exec_ctx, holder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_unlock(&holder->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GRPC_CALL_STACK_UNREF(exec_ctx, holder->owning_call, "pick_subchannel"); 
			 |