From b6f01c68aa56b0a15e6af0e930c926ca8ce770a0 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" <roth@google.com> Date: Fri, 15 Sep 2023 12:45:54 -0700 Subject: [PATCH] [pick_first] ignore duplicate calls to ExitIdleLocked() (#34374) --- .../client_channel/lb_policy/pick_first/pick_first.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc index be41867712a..86955752a85 100644 --- a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +++ b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc @@ -317,7 +317,10 @@ void PickFirst::ShutdownLocked() { void PickFirst::ExitIdleLocked() { if (shutdown_) return; - if (state_ == GRPC_CHANNEL_IDLE) { + // Need to check subchannel_list_ being null here, in case the + // application calls channel->GetState(true) again before we + // transition to state CONNECTING. + if (state_ == GRPC_CHANNEL_IDLE && subchannel_list_ == nullptr) { if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) { gpr_log(GPR_INFO, "Pick First %p exiting idle", this); }