diff --git a/gclc-process/src/main/java/net/bigeon/gclc/process/io/ConnectingConsoleInput.java b/gclc-process/src/main/java/net/bigeon/gclc/process/io/ConnectingConsoleInput.java index b33dea8..cf83ab3 100644 --- a/gclc-process/src/main/java/net/bigeon/gclc/process/io/ConnectingConsoleInput.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/io/ConnectingConsoleInput.java @@ -127,13 +127,13 @@ public final class ConnectingConsoleInput implements ConsoleInput { /** Disconnect the current input. */ public void disconnect() { - synchronized (connectionLock) { - if (connected != null) { - disconnection = true; - synchronized (promptLock) { + synchronized (promptLock) { + synchronized (connectionLock) { + if (connected != null) { + disconnection = true; connected.interruptPrompt(); + connected = null; } - connected = null; } } } @@ -191,7 +191,7 @@ public final class ConnectingConsoleInput implements ConsoleInput { if (!prompting) { return null; } - boolean connect = true; + boolean connect; synchronized (connectionLock) { connect = connected != null; } @@ -234,7 +234,11 @@ public final class ConnectingConsoleInput implements ConsoleInput { if (!prompting) { return null; } - if (connected == null) { + boolean connect; + synchronized (connectionLock) { + connect = connected != null; + } + if (!connect) { try { promptLock.wait(timeout); } catch (final InterruptedException e) { @@ -242,9 +246,9 @@ public final class ConnectingConsoleInput implements ConsoleInput { Thread.currentThread().interrupt(); } } else { - final String res = connected.prompt(message, - end - System.currentTimeMillis()); synchronized (connectionLock) { + final String res = connected.prompt(message, + end - System.currentTimeMillis()); if (disconnection) { disconnection = false; } else if (prompting) {