|
|
|
@ -129,7 +129,7 @@ static void set_channel_connectivity_state_locked(grpc_exec_ctx *exec_ctx, |
|
|
|
|
/* check= */ 0); |
|
|
|
|
} |
|
|
|
|
grpc_connectivity_state_set(exec_ctx, &chand->state_tracker, state, |
|
|
|
|
GRPC_ERROR_REF(error), reason); |
|
|
|
|
error, reason); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void on_lb_policy_state_changed_locked(grpc_exec_ctx *exec_ctx, |
|
|
|
@ -228,7 +228,7 @@ static void cc_on_config_changed(grpc_exec_ctx *exec_ctx, void *arg, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (error == GRPC_ERROR_NONE && chand->resolver) { |
|
|
|
|
set_channel_connectivity_state_locked(exec_ctx, chand, state, state_error, |
|
|
|
|
set_channel_connectivity_state_locked(exec_ctx, chand, state, GRPC_ERROR_REF(state_error), |
|
|
|
|
"new_lb+resolver"); |
|
|
|
|
if (lb_policy != NULL) { |
|
|
|
|
watch_lb_policy(exec_ctx, chand, lb_policy, state); |
|
|
|
@ -305,26 +305,29 @@ static void cc_start_transport_op(grpc_exec_ctx *exec_ctx, |
|
|
|
|
op->send_ping = NULL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (op->disconnect_with_error != GRPC_ERROR_NONE && chand->resolver != NULL) { |
|
|
|
|
set_channel_connectivity_state_locked( |
|
|
|
|
exec_ctx, chand, GRPC_CHANNEL_FATAL_FAILURE, |
|
|
|
|
GRPC_ERROR_REF(op->disconnect_with_error), "disconnect"); |
|
|
|
|
grpc_resolver_shutdown(exec_ctx, chand->resolver); |
|
|
|
|
GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel"); |
|
|
|
|
chand->resolver = NULL; |
|
|
|
|
if (!chand->started_resolving) { |
|
|
|
|
grpc_closure_list_fail_all(&chand->waiting_for_config_closures, |
|
|
|
|
op->disconnect_with_error); |
|
|
|
|
grpc_exec_ctx_enqueue_list(exec_ctx, &chand->waiting_for_config_closures, |
|
|
|
|
NULL); |
|
|
|
|
} |
|
|
|
|
if (chand->lb_policy != NULL) { |
|
|
|
|
grpc_pollset_set_del_pollset_set(exec_ctx, |
|
|
|
|
chand->lb_policy->interested_parties, |
|
|
|
|
chand->interested_parties); |
|
|
|
|
GRPC_LB_POLICY_UNREF(exec_ctx, chand->lb_policy, "channel"); |
|
|
|
|
chand->lb_policy = NULL; |
|
|
|
|
if (op->disconnect_with_error != GRPC_ERROR_NONE) { |
|
|
|
|
if (chand->resolver != NULL) { |
|
|
|
|
set_channel_connectivity_state_locked( |
|
|
|
|
exec_ctx, chand, GRPC_CHANNEL_FATAL_FAILURE, |
|
|
|
|
GRPC_ERROR_REF(op->disconnect_with_error), "disconnect"); |
|
|
|
|
grpc_resolver_shutdown(exec_ctx, chand->resolver); |
|
|
|
|
GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel"); |
|
|
|
|
chand->resolver = NULL; |
|
|
|
|
if (!chand->started_resolving) { |
|
|
|
|
grpc_closure_list_fail_all(&chand->waiting_for_config_closures, |
|
|
|
|
GRPC_ERROR_REF(op->disconnect_with_error)); |
|
|
|
|
grpc_exec_ctx_enqueue_list(exec_ctx, &chand->waiting_for_config_closures, |
|
|
|
|
NULL); |
|
|
|
|
} |
|
|
|
|
if (chand->lb_policy != NULL) { |
|
|
|
|
grpc_pollset_set_del_pollset_set(exec_ctx, |
|
|
|
|
chand->lb_policy->interested_parties, |
|
|
|
|
chand->interested_parties); |
|
|
|
|
GRPC_LB_POLICY_UNREF(exec_ctx, chand->lb_policy, "channel"); |
|
|
|
|
chand->lb_policy = NULL; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
GRPC_ERROR_UNREF(op->disconnect_with_error); |
|
|
|
|
} |
|
|
|
|
gpr_mu_unlock(&chand->mu_config); |
|
|
|
|
} |
|
|
|
|