summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorRobert Greig <rgreig@apache.org>2007-09-18 12:15:57 +0000
committerRobert Greig <rgreig@apache.org>2007-09-18 12:15:57 +0000
commit57a13486b566cddb3e56e7a9ba79bdeebd7726f5 (patch)
tree77ff66323ea851c009cd58b96f90b9221a794685 /java
parentc584a4b0271541e80d1cb0b6f1bb64454580dafe (diff)
downloadqpid-python-57a13486b566cddb3e56e7a9ba79bdeebd7726f5.tar.gz
QPID-531: merge of fix for NO_ACK causing a memory leak
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2@576861 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/queue/SubscriptionImpl.java4
-rw-r--r--java/systests/src/main/java/org/apache/qpid/server/queue/AckTest.java18
2 files changed, 22 insertions, 0 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/queue/SubscriptionImpl.java b/java/broker/src/main/java/org/apache/qpid/server/queue/SubscriptionImpl.java
index a7be9f2ad2..1299c3a80c 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/queue/SubscriptionImpl.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/queue/SubscriptionImpl.java
@@ -308,6 +308,10 @@ public class SubscriptionImpl implements Subscription
protocolSession.getProtocolOutputConverter().writeDeliver(msg, channel.getChannelId(), deliveryTag, consumerTag);
+ if (!_acks)
+ {
+ msg.decrementReference(storeContext);
+ }
}
}
finally
diff --git a/java/systests/src/main/java/org/apache/qpid/server/queue/AckTest.java b/java/systests/src/main/java/org/apache/qpid/server/queue/AckTest.java
index ae2209c629..29952a6d9b 100644
--- a/java/systests/src/main/java/org/apache/qpid/server/queue/AckTest.java
+++ b/java/systests/src/main/java/org/apache/qpid/server/queue/AckTest.java
@@ -187,9 +187,27 @@ public class AckTest extends TestCase
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
* set case)
*/