diff --git a/Mage.Common/src/mage/interfaces/callback/CallbackServerSession.java b/Mage.Common/src/mage/interfaces/callback/CallbackServerSession.java index 63d9a813425..31e130a543c 100644 --- a/Mage.Common/src/mage/interfaces/callback/CallbackServerSession.java +++ b/Mage.Common/src/mage/interfaces/callback/CallbackServerSession.java @@ -45,6 +45,7 @@ public class CallbackServerSession { private final Condition waiting = lock.newCondition(); private final Condition callbackCalled = lock.newCondition(); private boolean waitingForCallback; + private boolean threadAlive = true; /** * @@ -58,7 +59,7 @@ public class CallbackServerSession { try { waitingForCallback = true; waiting.signal(); - while (callback.getMethod() == null) { + while (callback.getMethod() == null && threadAlive) { logger.trace("waiting for callback"); callbackCalled.await(); } @@ -95,4 +96,15 @@ public class CallbackServerSession { } } + public void destroy() { + lock.lock(); + try { + threadAlive = false; + callbackCalled.signal(); + } + finally { + lock.unlock(); + } + } + } diff --git a/Mage.Server/src/main/java/mage/server/Session.java b/Mage.Server/src/main/java/mage/server/Session.java index feb81ba83ed..58d745549a9 100644 --- a/Mage.Server/src/main/java/mage/server/Session.java +++ b/Mage.Server/src/main/java/mage/server/Session.java @@ -84,6 +84,7 @@ public class Session { } public void kill() { + callback.destroy(); SessionManager.getInstance().removeSession(sessionId); TableManager.getInstance().removeSession(sessionId); GameManager.getInstance().removeSession(sessionId);