From 14e76891e2ca84e33359f4e1870d480daa830b6b Mon Sep 17 00:00:00 2001 From: Robert Davies Date: Tue, 18 Dec 2012 15:45:55 +0000 Subject: [PATCH] Fix for https://issues.apache.org/jira/browse/AMQ-4233 git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1423481 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/activemq/ActiveMQMessageAudit.java | 6 ++++++ .../apache/activemq/ActiveMQMessageAuditNoSync.java | 13 ++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageAudit.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageAudit.java index 9df5e3eb6d..585e54f24e 100755 --- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageAudit.java +++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageAudit.java @@ -80,4 +80,10 @@ public class ActiveMQMessageAudit extends ActiveMQMessageAuditNoSync { return super.isInOrder(id); } } + + public void setMaximumNumberOfProducersToTrack(int maximumNumberOfProducersToTrack) { + synchronized (this) { + super.setMaximumNumberOfProducersToTrack(maximumNumberOfProducersToTrack); + } + } } diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageAuditNoSync.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageAuditNoSync.java index c8de50e757..d79bfe95df 100755 --- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageAuditNoSync.java +++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageAuditNoSync.java @@ -89,8 +89,19 @@ public class ActiveMQMessageAuditNoSync implements Serializable { * @param maximumNumberOfProducersToTrack the maximumNumberOfProducersToTrack to set */ public void setMaximumNumberOfProducersToTrack(int maximumNumberOfProducersToTrack) { - this.maximumNumberOfProducersToTrack = maximumNumberOfProducersToTrack; + + if (maximumNumberOfProducersToTrack < this.maximumNumberOfProducersToTrack){ + LRUCache newMap = new LRUCache(0,maximumNumberOfProducersToTrack,0.75f,true); + /** + * As putAll will access the entries in the right order, + * this shouldn't result in wrong cache entries being removed + */ + newMap.putAll(this.map); + this.map.clear(); + this.map.putAll(newMap); + } this.map.setMaxCacheSize(maximumNumberOfProducersToTrack); + this.maximumNumberOfProducersToTrack = maximumNumberOfProducersToTrack; this.modified = true; }