diff --git a/core/src/main/java/com/google/net/stubby/ChannelImpl.java b/core/src/main/java/com/google/net/stubby/ChannelImpl.java index 00a1f4828c..56d76c352a 100644 --- a/core/src/main/java/com/google/net/stubby/ChannelImpl.java +++ b/core/src/main/java/com/google/net/stubby/ChannelImpl.java @@ -87,16 +87,8 @@ public final class ChannelImpl extends AbstractService implements Channel { transports.add(newTransport); // activeTransport reference can be changed during calls to the transport, even if we hold the // lock, due to reentrancy. - newTransport.addListener( - new TransportListener(newTransport), MoreExecutors.directExecutor()); - if (notifyWhenRunning) { - newTransport.addListener(new Listener() { - @Override - public void running() { - notifyStarted(); - } - }, executor); - } + newTransport.addListener(new TransportListener(newTransport, notifyWhenRunning), + MoreExecutors.directExecutor()); newTransport.startAsync(); return newTransport; } @@ -123,9 +115,11 @@ public final class ChannelImpl extends AbstractService implements Channel { private class TransportListener extends Listener { private final ClientTransport transport; + private final boolean notifyWhenRunning; - public TransportListener(ClientTransport transport) { + public TransportListener(ClientTransport transport, boolean notifyWhenRunning) { this.transport = transport; + this.notifyWhenRunning = notifyWhenRunning; } @Override @@ -146,6 +140,13 @@ public final class ChannelImpl extends AbstractService implements Channel { public void terminated(State from) { transportFailedOrStopped(transport, null); } + + @Override + public void running() { + if (notifyWhenRunning) { + notifyStarted(); + } + } } private class CallImpl extends Call {