aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/client_config/lb_policies/pick_first.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/client_config/lb_policies/pick_first.c')
-rw-r--r--src/core/client_config/lb_policies/pick_first.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/core/client_config/lb_policies/pick_first.c b/src/core/client_config/lb_policies/pick_first.c
index 8ea774bebc..c9a200eb8c 100644
--- a/src/core/client_config/lb_policies/pick_first.c
+++ b/src/core/client_config/lb_policies/pick_first.c
@@ -97,7 +97,7 @@ static void add_interested_parties_locked(pick_first_lb_policy *p,
void pf_destroy(grpc_lb_policy *pol, grpc_call_list *call_list) {
pick_first_lb_policy *p = (pick_first_lb_policy *)pol;
size_t i;
- GPR_ASSERT(p->shutdown);
+ GPR_ASSERT(p->pending_picks == NULL);
for (i = 0; i < p->num_subchannels; i++) {
GRPC_SUBCHANNEL_UNREF(p->subchannels[i], "pick_first", call_list);
}
@@ -180,7 +180,9 @@ static void pf_connectivity_changed(void *arg, int iomgr_success,
gpr_mu_lock(&p->mu);
if (p->shutdown) {
+ gpr_mu_unlock(&p->mu);
GRPC_LB_POLICY_UNREF(&p->base, "pick_first_connectivity", call_list);
+ return;
} else if (p->selected != NULL) {
grpc_connectivity_state_set(&p->state_tracker, p->checking_connectivity,
"selected_changed", call_list);