Fix bug 18054433, only register one listener on transport service.

-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=78112905
This commit is contained in:
simonma 2014-10-20 13:39:15 -07:00 committed by Eric Anderson
parent 28fb46ef49
commit 2ce8215b0c
1 changed files with 12 additions and 11 deletions

View File

@ -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<ReqT, RespT> extends Call<ReqT, RespT> {