diff --git a/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java b/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java index 3f913120e..116f3b15d 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java @@ -691,7 +691,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection { } /** - * We use an extra object for {@link #notifyWaitingThreads()} and {@link #waitForConditionOrConnectionException(Supplier)}, because all state + * We use an extra object for {@link #notifyWaitingThreads()} and {@link #waitFor(Supplier)}, because all state * changing methods of the connection are synchronized using the connection instance as monitor. If we now would * also use the connection instance for the internal process to wait for a condition, the {@link Object#wait()} * would leave the monitor when it waites, which would allow for another potential call to a state changing function @@ -719,22 +719,18 @@ public abstract class AbstractXMPPConnection implements XMPPConnection { return true; } - protected final boolean waitForConditionOrConnectionException(Supplier condition) throws InterruptedException { - return waitFor(() -> condition.get().booleanValue() || hasCurrentConnectionException()); - } - - protected final void waitForConditionOrConnectionException(Supplier condition, String waitFor) throws InterruptedException, NoResponseException { - boolean success = waitForConditionOrConnectionException(condition); - if (!success) { - throw NoResponseException.newWith(this, waitFor); - } - } - protected final void waitForConditionOrThrowConnectionException(Supplier condition, String waitFor) throws InterruptedException, SmackException, XMPPException { - waitForConditionOrConnectionException(condition, waitFor); + boolean success = waitFor(() -> condition.get().booleanValue() || hasCurrentConnectionException()); if (hasCurrentConnectionException()) { throwCurrentConnectionException(); } + + // If there was no connection exception and we still did not successfully wait for the condition to hold, then + // we ran into a no-response timeout. + if (!success) { + throw NoResponseException.newWith(this, waitFor); + } + // Otherwise we successfully awaited the condition. } protected Resourcepart bindResourceAndEstablishSession(Resourcepart resource)