mirror of https://github.com/grpc/grpc-java.git
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:
parent
28fb46ef49
commit
2ce8215b0c
|
|
@ -87,16 +87,8 @@ public final class ChannelImpl extends AbstractService implements Channel {
|
||||||
transports.add(newTransport);
|
transports.add(newTransport);
|
||||||
// activeTransport reference can be changed during calls to the transport, even if we hold the
|
// activeTransport reference can be changed during calls to the transport, even if we hold the
|
||||||
// lock, due to reentrancy.
|
// lock, due to reentrancy.
|
||||||
newTransport.addListener(
|
newTransport.addListener(new TransportListener(newTransport, notifyWhenRunning),
|
||||||
new TransportListener(newTransport), MoreExecutors.directExecutor());
|
MoreExecutors.directExecutor());
|
||||||
if (notifyWhenRunning) {
|
|
||||||
newTransport.addListener(new Listener() {
|
|
||||||
@Override
|
|
||||||
public void running() {
|
|
||||||
notifyStarted();
|
|
||||||
}
|
|
||||||
}, executor);
|
|
||||||
}
|
|
||||||
newTransport.startAsync();
|
newTransport.startAsync();
|
||||||
return newTransport;
|
return newTransport;
|
||||||
}
|
}
|
||||||
|
|
@ -123,9 +115,11 @@ public final class ChannelImpl extends AbstractService implements Channel {
|
||||||
|
|
||||||
private class TransportListener extends Listener {
|
private class TransportListener extends Listener {
|
||||||
private final ClientTransport transport;
|
private final ClientTransport transport;
|
||||||
|
private final boolean notifyWhenRunning;
|
||||||
|
|
||||||
public TransportListener(ClientTransport transport) {
|
public TransportListener(ClientTransport transport, boolean notifyWhenRunning) {
|
||||||
this.transport = transport;
|
this.transport = transport;
|
||||||
|
this.notifyWhenRunning = notifyWhenRunning;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -146,6 +140,13 @@ public final class ChannelImpl extends AbstractService implements Channel {
|
||||||
public void terminated(State from) {
|
public void terminated(State from) {
|
||||||
transportFailedOrStopped(transport, null);
|
transportFailedOrStopped(transport, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void running() {
|
||||||
|
if (notifyWhenRunning) {
|
||||||
|
notifyStarted();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class CallImpl<ReqT, RespT> extends Call<ReqT, RespT> {
|
private class CallImpl<ReqT, RespT> extends Call<ReqT, RespT> {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue