@@ -779,30 +779,16 @@ void panic(final Throwable t) {
|
779 | 779 | return; |
780 | 780 | } |
781 | 781 | panicMode = true; |
782 | | -cancelIdleTimer(/* permanent= */ true); |
783 | | -shutdownNameResolverAndLoadBalancer(false); |
784 | | -final class PanicSubchannelPicker extends SubchannelPicker { |
785 | | -private final PickResult panicPickResult = |
786 | | -PickResult.withDrop( |
787 | | -Status.INTERNAL.withDescription("Panic! This is a bug!").withCause(t)); |
788 | | - |
789 | | -@Override |
790 | | -public PickResult pickSubchannel(PickSubchannelArgs args) { |
791 | | -return panicPickResult; |
792 | | - } |
793 | | - |
794 | | -@Override |
795 | | -public String toString() { |
796 | | -return MoreObjects.toStringHelper(PanicSubchannelPicker.class) |
797 | | - .add("panicPickResult", panicPickResult) |
798 | | - .toString(); |
799 | | - } |
| 782 | +try { |
| 783 | +cancelIdleTimer(/* permanent= */ true); |
| 784 | +shutdownNameResolverAndLoadBalancer(false); |
| 785 | + } finally { |
| 786 | +updateSubchannelPicker(new LoadBalancer.FixedResultPicker(PickResult.withDrop( |
| 787 | +Status.INTERNAL.withDescription("Panic! This is a bug!").withCause(t)))); |
| 788 | +realChannel.updateConfigSelector(null); |
| 789 | +channelLogger.log(ChannelLogLevel.ERROR, "PANIC! Entering TRANSIENT_FAILURE"); |
| 790 | +channelStateManager.gotoState(TRANSIENT_FAILURE); |
800 | 791 | } |
801 | | - |
802 | | -updateSubchannelPicker(new PanicSubchannelPicker()); |
803 | | -realChannel.updateConfigSelector(null); |
804 | | -channelLogger.log(ChannelLogLevel.ERROR, "PANIC! Entering TRANSIENT_FAILURE"); |
805 | | -channelStateManager.gotoState(TRANSIENT_FAILURE); |
806 | 792 | } |
807 | 793 | |
808 | 794 | @VisibleForTesting |
@@ -1404,7 +1390,7 @@ public void updateBalancingState(
|
1404 | 1390 | final class UpdateBalancingState implements Runnable { |
1405 | 1391 | @Override |
1406 | 1392 | public void run() { |
1407 | | -if (LbHelperImpl.this != lbHelper) { |
| 1393 | +if (LbHelperImpl.this != lbHelper || panicMode) { |
1408 | 1394 | return; |
1409 | 1395 | } |
1410 | 1396 | updateSubchannelPicker(newPicker); |
|