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