You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2012/05/09 18:56:56 UTC
svn commit: r1336295 -
/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java
Author: kwall
Date: Wed May 9 16:56:56 2012
New Revision: 1336295
URL: http://svn.apache.org/viewvc?rev=1336295&view=rev
Log:
QPID-3979: [Java Broker] Conflation queues: guard NPE identified by review feedback.
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java?rev=1336295&r1=1336294&r2=1336295&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java Wed May 9 16:56:56 2012
@@ -72,22 +72,29 @@ public class ConflationQueueList extends
do
{
latestValueReference = getOrPutIfAbsent(keyValue, referenceToEntry);
- oldEntry = latestValueReference.get();
+ oldEntry = latestValueReference == null ? null : latestValueReference.get();
}
- while(oldEntry.compareTo(entry) < 0
+ while(oldEntry != null
+ && oldEntry.compareTo(entry) < 0
&& oldEntry != getHead()
&& !latestValueReference.compareAndSet(oldEntry, entry));
- if(oldEntry.compareTo(entry) < 0)
+ if (oldEntry == null)
{
- // We replaced some other entry to become the newest value
- discardEntry(oldEntry);
+ // Unlikely: A newer entry came along and was consumed (and entry removed from map)
+ // during our processing of getOrPutIfAbsent(). In this case we know our entry has been superseded.
+ discardEntry(entry);
}
else if (oldEntry.compareTo(entry) > 0)
{
// A newer entry came along
discardEntry(entry);
}
+ else if (oldEntry.compareTo(entry) < 0)
+ {
+ // We replaced some other entry to become the newest value
+ discardEntry(oldEntry);
+ }
entry.setLatestValueReference(latestValueReference);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org