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