diff options
author | Craig Tiller <craig.tiller@gmail.com> | 2015-06-30 08:15:55 -0700 |
---|---|---|
committer | Craig Tiller <craig.tiller@gmail.com> | 2015-06-30 08:15:55 -0700 |
commit | 87cc0848ce279892cce562b3aa6cfae870d05e50 (patch) | |
tree | 2a73f3e12faf66bc8094492b4be4d35a76a80b6c /src/core/client_config/lb_policies/pick_first.c | |
parent | b49736829a3e9bf4140b17465ff6c208462e783f (diff) |
client_config bugfixes
Diffstat (limited to 'src/core/client_config/lb_policies/pick_first.c')
-rw-r--r-- | src/core/client_config/lb_policies/pick_first.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/core/client_config/lb_policies/pick_first.c b/src/core/client_config/lb_policies/pick_first.c index a8e5b5cc4a..ffdae75b28 100644 --- a/src/core/client_config/lb_policies/pick_first.c +++ b/src/core/client_config/lb_policies/pick_first.c @@ -176,15 +176,20 @@ loop: del_interested_parties_locked(p); GPR_SWAP(grpc_subchannel *, p->subchannels[p->checking_subchannel], p->subchannels[p->num_subchannels - 1]); - p->checking_subchannel %= p->num_subchannels; - p->checking_connectivity = grpc_subchannel_check_connectivity( - p->subchannels[p->checking_subchannel]); p->num_subchannels--; - GRPC_SUBCHANNEL_UNREF(p->subchannels[p->num_subchannels], "pick_first"); - add_interested_parties_locked(p); if (p->num_subchannels == 0) { - abort(); + while ((pp = p->pending_picks)) { + p->pending_picks = pp->next; + *pp->target = NULL; + grpc_iomgr_add_delayed_callback(pp->on_complete, 1); + gpr_free(pp); + } } else { + p->checking_subchannel %= p->num_subchannels; + p->checking_connectivity = grpc_subchannel_check_connectivity( + p->subchannels[p->checking_subchannel]); + GRPC_SUBCHANNEL_UNREF(p->subchannels[p->num_subchannels], "pick_first"); + add_interested_parties_locked(p); goto loop; } } |