in provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/tcp/TransportPool.java [135:166]
public void stop(final Runnable onComplete) {
if (running.compareAndSet(true, false)) {
queue.execute(new Runnable() {
public void run() {
final AtomicInteger latch = new AtomicInteger(transports.size());
final Runnable countDown = new Runnable() {
public void run() {
if (latch.decrementAndGet() == 0) {
while (!pending.isEmpty()) {
Pair p = pending.removeFirst();
onFailure(p.id, new IOException("Transport stopped"));
}
onComplete.run();
}
}
};
while (!transports.isEmpty()) {
Transport transport = transports.keySet().iterator().next();
TransportState state = transports.remove(transport);
if (state != null) {
for (Object id : state.inflight) {
onFailure(id, new IOException("Transport stopped"));
}
}
transport.stop(countDown);
}
}
});
} else {
onComplete.run();
}
}