This is an automated email from the ASF dual-hosted git repository.

gtully pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq.git


The following commit(s) were added to refs/heads/master by this push:
     new efc857f  AMQ-7233 - ensure sessions are cleaned up on 
pooledconnection.close before temp dests to ensure temp dests actually get 
deleted, fix and test
efc857f is described below

commit efc857fc1f679631dcb98b9bf6b13317e7a80785
Author: gtully <[email protected]>
AuthorDate: Wed Jun 19 10:29:11 2019 +0100

    AMQ-7233 - ensure sessions are cleaned up on pooledconnection.close before 
temp dests to ensure temp dests actually get deleted, fix and test
---
 .../apache/activemq/jms/pool/PooledConnection.java    |  2 +-
 ...onnectionFactoryWithTemporaryDestinationsTest.java | 19 +++++++++++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git 
a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnection.java
 
b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnection.java
index 111e730..00911ec 100644
--- 
a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnection.java
+++ 
b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnection.java
@@ -81,8 +81,8 @@ public class PooledConnection implements TopicConnection, 
QueueConnection, Poole
 
     @Override
     public void close() throws JMSException {
-        this.cleanupConnectionTemporaryDestinations();
         this.cleanupAllLoanedSessions();
+        this.cleanupConnectionTemporaryDestinations();
         if (this.pool != null) {
             this.pool.decrementReferenceCount();
             this.pool = null;
diff --git 
a/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/PooledConnectionFactoryWithTemporaryDestinationsTest.java
 
b/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/PooledConnectionFactoryWithTemporaryDestinationsTest.java
index 86b4e27..d879580 100644
--- 
a/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/PooledConnectionFactoryWithTemporaryDestinationsTest.java
+++ 
b/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/PooledConnectionFactoryWithTemporaryDestinationsTest.java
@@ -19,6 +19,7 @@ package org.apache.activemq.jms.pool;
 import static org.junit.Assert.assertEquals;
 
 import javax.jms.Connection;
+import javax.jms.MessageConsumer;
 import javax.jms.Queue;
 import javax.jms.Session;
 import javax.jms.Topic;
@@ -119,6 +120,24 @@ public class 
PooledConnectionFactoryWithTemporaryDestinationsTest extends JmsPoo
         assertEquals(0, countBrokerTemporaryTopics());
     }
 
+    @Test(timeout = 60000)
+    public void testTemporaryQueueLeakAfterConnectionCloseWithConsumer() 
throws Exception {
+        Connection pooledConnection = null;
+        Session session = null;
+        Queue tempQueue = null;
+        for (int i = 0; i < 2; i++) {
+            pooledConnection = pooledFactory.createConnection();
+            session = pooledConnection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+            tempQueue = session.createTemporaryQueue();
+            MessageConsumer consumer = session.createConsumer(tempQueue);
+            consumer.receiveNoWait();
+            LOG.info("Created queue named: " + tempQueue.getQueueName());
+            pooledConnection.close();
+        }
+
+        assertEquals(0, countBrokerTemporaryQueues());
+    }
+
     private int countBrokerTemporaryQueues() throws Exception {
         return ((RegionBroker) 
brokerService.getRegionBroker()).getTempQueueRegion().getDestinationMap().size();
     }

Reply via email to