diff --git a/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java b/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java index b3a69bbce9bb..10aa197efb69 100644 --- a/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java +++ b/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java @@ -1568,6 +1568,7 @@ public void run() { Status serviceConfigError = configOrError != null ? configOrError.getError() : null; ManagedChannelServiceConfig effectiveServiceConfig; + InternalConfigSelector prevConfigSelector = configSelector.get(); if (!lookUpServiceConfig) { if (validServiceConfig != null) { channelLogger.log( @@ -1639,7 +1640,9 @@ public void run() { re); } } - realChannel.drainPendingCalls(); + if (prevConfigSelector == INITIAL_PENDING_SELECTOR) { + realChannel.drainPendingCalls(); + } Attributes effectiveAttrs = resolutionResult.getAttributes(); // Call LB only if it's not shutdown. If LB is shutdown, lbHelper won't match.