diff --git a/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java b/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java index 16b6836b62..cb9a892e90 100755 --- a/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java +++ b/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java @@ -593,6 +593,10 @@ public class ActiveMQConnection implements Connection, TopicConnection, QueueCon // then we may need to call // factory.onConnectionClose(this); sessionTaskRunner.shutdown(); + + if (asyncConnectionThread != null){ + asyncConnectionThread.shutdown(); + } closed.set(true); closing.set(false); @@ -1652,20 +1656,23 @@ public class ActiveMQConnection implements Connection, TopicConnection, QueueCon } public void onException(final IOException error) { - onAsyncException(error); - asyncConnectionThread.execute(new Runnable() { - public void run() { - transportFailed(error); - ServiceSupport.dispose(ActiveMQConnection.this.transport); - brokerInfoReceived.countDown(); + onAsyncException(error); + if (!closing.get() && !closed.get()) { + asyncConnectionThread.execute(new Runnable() { + public void run() { + transportFailed(error); + ServiceSupport.dispose(ActiveMQConnection.this.transport); + brokerInfoReceived.countDown(); - for (Iterator iter = transportListeners.iterator(); iter.hasNext();) { - TransportListener listener = iter.next(); - listener.onException(error); - } - } - }); - } + for (Iterator iter = transportListeners + .iterator(); iter.hasNext();) { + TransportListener listener = iter.next(); + listener.onException(error); + } + } + }); + } + } public void transportInterupted() { for (Iterator i = this.sessions.iterator(); i.hasNext();) {