Index: src/test/java/quickfix/mina/ThreadPerSessionEventHandlingStrategyTest.java =================================================================== --- src/test/java/quickfix/mina/ThreadPerSessionEventHandlingStrategyTest.java (revision 721) +++ src/test/java/quickfix/mina/ThreadPerSessionEventHandlingStrategyTest.java (working copy) @@ -95,7 +95,10 @@ public void disconnect() { } - + public void disconnect(boolean waitToSendOutstandingMessages) { + + } + public boolean send(String data) { return false; } Index: src/test/java/quickfix/SessionTest.java =================================================================== --- src/test/java/quickfix/SessionTest.java (revision 721) +++ src/test/java/quickfix/SessionTest.java (working copy) @@ -232,6 +232,8 @@ public void disconnect() { } + public void disconnect(boolean waitToSendOutstandingMessages) { + } } } Index: src/main/java/quickfix/Responder.java =================================================================== --- src/main/java/quickfix/Responder.java (revision 721) +++ src/main/java/quickfix/Responder.java (working copy) @@ -43,6 +43,7 @@ * */ void disconnect(); + void disconnect(boolean waitToSendOutstandingMessages); /** * Provides remote IP address of the session connection, if any. Index: src/main/java/quickfix/mina/AbstractIoHandler.java =================================================================== --- src/main/java/quickfix/mina/AbstractIoHandler.java (revision 721) +++ src/main/java/quickfix/mina/AbstractIoHandler.java (working copy) @@ -79,7 +79,7 @@ } if (disconnectNeeded) { if (quickFixSession != null) { - quickFixSession.disconnect(); + quickFixSession.disconnect(false); } else { ioSession.close(); } Index: src/main/java/quickfix/mina/IoSessionResponder.java =================================================================== --- src/main/java/quickfix/mina/IoSessionResponder.java (revision 721) +++ src/main/java/quickfix/mina/IoSessionResponder.java (working copy) @@ -40,7 +40,13 @@ } public void disconnect() { - waitForScheduleMessagesToBeWritten(); + disconnect(true); + } + + public void disconnect(boolean waitToSendOutstandingMessages) { + if (waitToSendOutstandingMessages) { + waitForScheduleMessagesToBeWritten(); + } // We cannot call join() on the CloseFuture returned // by the following call. We are using a minimal // threading model and calling join will prevent the Index: src/main/java/quickfix/Session.java =================================================================== --- src/main/java/quickfix/Session.java (revision 721) +++ src/main/java/quickfix/Session.java (working copy) @@ -1364,12 +1364,16 @@ * @throws IOException IO error */ public void disconnect() throws IOException { + disconnect(true); + } + + public void disconnect(boolean waitToSendOutstandingMessages) throws IOException { Responder responder = getResponder(); if (responder != null) { - getLog().onEvent("Disconnecting"); - responder.disconnect(); - setResponder(null); - } + getLog().onEvent("Disconnecting"); + responder.disconnect(waitToSendOutstandingMessages); + setResponder(null); + } boolean logonReceived = state.isLogonReceived(); boolean logonSent = state.isLogonSent();