You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2006/07/20 08:13:43 UTC

svn commit: r423797 - /incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java

Author: jstrachan
Date: Wed Jul 19 23:13:43 2006
New Revision: 423797

URL: http://svn.apache.org/viewvc?rev=423797&view=rev
Log:
added patch for AMQ-835 - many thanks Ozgur Cetinturk

Modified:
    incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java

Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java?rev=423797&r1=423796&r2=423797&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java Wed Jul 19 23:13:43 2006
@@ -529,52 +529,56 @@
     public void close() throws JMSException {
         checkClosed();
 
-        // If we were running, lets stop first.
-        stop();
+        try {
+            // If we were running, lets stop first.
+            stop();
+
+            synchronized (this) {
+                if (!closed.get()) {
+                    closing.set(true);
+
+                    if (advisoryConsumer != null) {
+                        advisoryConsumer.dispose();
+                        advisoryConsumer = null;
+                    }
+
+                    for (Iterator i = this.sessions.iterator(); i.hasNext();) {
+                        ActiveMQSession s = (ActiveMQSession) i.next();
+                        s.dispose();
+                    }
+                    for (Iterator i = this.connectionConsumers.iterator(); i.hasNext();) {
+                        ActiveMQConnectionConsumer c = (ActiveMQConnectionConsumer) i.next();
+                        c.dispose();
+                    }
+                    for (Iterator i = this.inputStreams.iterator(); i.hasNext();) {
+                        ActiveMQInputStream c = (ActiveMQInputStream) i.next();
+                        c.dispose();
+                    }
+                    for (Iterator i = this.outputStreams.iterator(); i.hasNext();) {
+                        ActiveMQOutputStream c = (ActiveMQOutputStream) i.next();
+                        c.dispose();
+                    }
+
+                    if (isConnectionInfoSentToBroker) {
+                        syncSendPacket(info.createRemoveCommand(), closeTimeout);
+                    }
+
+                    asyncSendPacket(new ShutdownInfo());
+                    ServiceSupport.dispose(this.transport);
+
+                    started.set(false);
+
+                    // TODO : ActiveMQConnectionFactory.onConnectionClose() not
+                    // yet implemented.
+                    // factory.onConnectionClose(this);
 
-        synchronized (this) {
-            if (!closed.get()) {
-                closing.set(true);
-
-                if( advisoryConsumer!=null ) {
-                    advisoryConsumer.dispose();
-                    advisoryConsumer=null;
+                    closed.set(true);
+                    closing.set(false);
                 }
-
-                for (Iterator i = this.sessions.iterator(); i.hasNext();) {
-                    ActiveMQSession s = (ActiveMQSession) i.next();
-                    s.dispose();
-                }
-                for (Iterator i = this.connectionConsumers.iterator(); i.hasNext();) {
-                    ActiveMQConnectionConsumer c = (ActiveMQConnectionConsumer) i.next();
-                    c.dispose();
-                }
-                for (Iterator i = this.inputStreams.iterator(); i.hasNext();) {
-                    ActiveMQInputStream c = (ActiveMQInputStream) i.next();
-                    c.dispose();
-                }
-                for (Iterator i = this.outputStreams.iterator(); i.hasNext();) {
-                    ActiveMQOutputStream c = (ActiveMQOutputStream) i.next();
-                    c.dispose();
-                }
-                
-                
-                if (isConnectionInfoSentToBroker) {
-                    syncSendPacket(info.createRemoveCommand(),closeTimeout);
-                }
-
-                asyncSendPacket(new ShutdownInfo());
-                ServiceSupport.dispose(this.transport);
-
-                started.set(false);
-
-                // TODO : ActiveMQConnectionFactory.onConnectionClose() not
-                // yet implemented.
-                // factory.onConnectionClose(this);
-                
-                closed.set(true);
-                closing.set(false);
             }
+        }
+        finally {
+            factoryStats.removeConnection(this);
         }
     }