Assume that subchannels start in state IDLE.
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 9b5b921..f0c66c68 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
@@ -312,6 +312,10 @@
               exec_ctx, p->subchannel_list, "pf_update_includes_selected");
         }
         p->subchannel_list = subchannel_list;
+        if (p->selected->connected_subchannel != NULL) {
+          sd->connected_subchannel = GRPC_CONNECTED_SUBCHANNEL_REF(
+              p->selected->connected_subchannel, "pf_update_includes_selected");
+        }
         p->selected = sd;
         destroy_unselected_subchannels_locked(exec_ctx, p);
         // If there was a previously pending update (which may or may
@@ -442,8 +446,6 @@
   }
   while (true) {
     switch (sd->curr_connectivity_state) {
-      case GRPC_CHANNEL_INIT:
-        GPR_UNREACHABLE_CODE(return );
       case GRPC_CHANNEL_READY: {
         // Case 2.  Promote p->latest_pending_subchannel_list to
         // p->subchannel_list.