Author: rgreig
Date: Tue Sep 18 05:15:57 2007
New Revision: 576861

URL: http://svn.apache.org/viewvc?rev=576861&view=rev
Log:
QPID-531: merge of fix for NO_ACK causing a memory leak

Modified:
    
incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/queue/SubscriptionImpl.java
    
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/queue/AckTest.java

Modified: 
incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/queue/SubscriptionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/queue/SubscriptionImpl.java?rev=576861&r1=576860&r2=576861&view=diff
==============================================================================
--- 
incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/queue/SubscriptionImpl.java
 (original)
+++ 
incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/queue/SubscriptionImpl.java
 Tue Sep 18 05:15:57 2007
@@ -308,6 +308,10 @@
 
                 protocolSession.getProtocolOutputConverter().writeDeliver(msg, 
channel.getChannelId(), deliveryTag, consumerTag);
 
+                if (!_acks)
+                {
+                    msg.decrementReference(storeContext);
+                }
             }
         }
         finally

Modified: 
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/queue/AckTest.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/queue/AckTest.java?rev=576861&r1=576860&r2=576861&view=diff
==============================================================================
--- 
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/queue/AckTest.java
 (original)
+++ 
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/queue/AckTest.java
 Tue Sep 18 05:15:57 2007
@@ -187,7 +187,25 @@
         UnacknowledgedMessageMap map = _channel.getUnacknowledgedMessageMap();
         assertTrue(map.size() == 0);
         assertTrue(_messageStore.getMessageMetaDataMap().size() == 0);
+        assertTrue(_messageStore.getContentBodyMap().size() == 0);
     }
+
+    /**
+     * Tests that in no-ack mode no messages are retained
+     */
+    public void testPersistentNoAckMode() throws AMQException
+    {
+        // false arg means no acks expected
+        _subscription = new SubscriptionImpl(5, _protocolSession, 
DEFAULT_CONSUMER_TAG, false);
+        final int msgCount = 10;
+        publishMessages(msgCount, true);
+
+        UnacknowledgedMessageMap map = _channel.getUnacknowledgedMessageMap();
+        assertTrue(map.size() == 0);
+        assertTrue(_messageStore.getMessageMetaDataMap().size() == 0);
+        assertTrue(_messageStore.getContentBodyMap().size() == 0);
+    }
+
 
     /**
      * Tests that a single acknowledgement is handled correctly (i.e multiple 
flag not


Reply via email to