Move assertion for open channels under TcpTransport lock

TcpTransport has an actual mechanism to stop resources in subclasses.
Instead of overriding `doStop` subclasses should override `stopInternal`
that is executed under the connection lock guaranteeing that there is no
concurrency etc.

Relates to #22554
This commit is contained in:
Simon Willnauer 2017-01-11 23:37:12 +01:00
parent b7995fbc0d
commit 8a0393f718
2 changed files with 4 additions and 13 deletions

View File

@ -840,7 +840,7 @@ public abstract class TcpTransport<Channel> extends AbstractLifecycleComponent i
} }
@Override @Override
protected void doClose() { protected final void doClose() {
} }
@Override @Override

View File

@ -400,23 +400,14 @@ public class MockTcpTransport extends TcpTransport<MockTcpTransport.MockChannel>
@Override @Override
protected void stopInternal() { protected void stopInternal() {
ThreadPool.terminate(executor, 10, TimeUnit.SECONDS); ThreadPool.terminate(executor, 10, TimeUnit.SECONDS);
synchronized (openChannels) {
assert openChannels.isEmpty() : "there are still open channels: " + openChannels;
}
} }
@Override @Override
protected Version getCurrentVersion() { protected Version getCurrentVersion() {
return mockVersion; return mockVersion;
} }
@Override
protected void doClose() {
if (Thread.currentThread().isInterrupted() == false) {
// TCPTransport might be interrupted due to a timeout waiting for connections to be closed.
// in this case the thread is interrupted and we can't tell if we really missed something or if we are
// still closing connections. in such a case we don't assert the open channels
synchronized (openChannels) {
assert openChannels.isEmpty() : "there are still open channels: " + openChannels;
}
}
}
} }