@ -174,17 +174,15 @@ static void subchannel_ready(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
holder - > creation_phase = GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING ;
if ( holder - > connected_subchannel = = NULL ) {
fail_locked ( exec_ctx , holder ) ;
} else if ( 1 = = gpr_atm_acq_load ( & holder - > subchannel_call ) ) {
/* already cancelled before subchannel became ready */
fail_locked ( exec_ctx , holder ) ;
} else {
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_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 ) ;
}
gpr_mu_unlock ( & holder - > mu ) ;
GRPC_CALL_STACK_UNREF ( exec_ctx , holder - > owning_call , " pick_subchannel " ) ;