diff --git a/aeron-client/src/main/java/io/aeron/ClientConductor.java b/aeron-client/src/main/java/io/aeron/ClientConductor.java index 2ecd9a2a96..f8ae2fc0ed 100644 --- a/aeron-client/src/main/java/io/aeron/ClientConductor.java +++ b/aeron-client/src/main/java/io/aeron/ClientConductor.java @@ -102,16 +102,12 @@ public void onClose() { isClosed = true; - for (final ExclusivePublication publication : activeExclusivePublications.values()) + forceClosePublicationsAndSubscriptions(); + + if (lingeringResources.size() > 0) { - publication.forceClose(); + sleep(1); } - activeExclusivePublications.clear(); - - activePublications.close(); - activeSubscriptions.close(); - - Thread.yield(); for (int i = 0, size = lingeringResources.size(); i < size; i++) { @@ -502,6 +498,12 @@ private int onCheckTimeouts() if (nowNs > (timeOfLastWorkNs + interServiceTimeoutNs)) { + forceClosePublicationsAndSubscriptions(); + if (lingeringResources.size() > 0) + { + sleep(1000); + } + onClose(); throw new ConductorServiceTimeoutException( @@ -558,4 +560,16 @@ private void checkDriverHeartbeat() } } } + + private void forceClosePublicationsAndSubscriptions() + { + for (final ExclusivePublication publication : activeExclusivePublications.values()) + { + publication.forceClose(); + } + activeExclusivePublications.clear(); + + activePublications.close(); + activeSubscriptions.close(); + } }