[hornetq-commits] JBoss hornetq SVN: r9865 - branches/Branch_New_Paging/src/main/org/hornetq/core/paging/cursor/impl.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Nov 10 12:28:31 EST 2010


Author: clebert.suconic at jboss.com
Date: 2010-11-10 12:28:31 -0500 (Wed, 10 Nov 2010)
New Revision: 9865

Modified:
   branches/Branch_New_Paging/src/main/org/hornetq/core/paging/cursor/impl/PageSubscriptionImpl.java
Log:
fixing deadlock

Modified: branches/Branch_New_Paging/src/main/org/hornetq/core/paging/cursor/impl/PageSubscriptionImpl.java
===================================================================
--- branches/Branch_New_Paging/src/main/org/hornetq/core/paging/cursor/impl/PageSubscriptionImpl.java	2010-11-10 02:49:26 UTC (rev 9864)
+++ branches/Branch_New_Paging/src/main/org/hornetq/core/paging/cursor/impl/PageSubscriptionImpl.java	2010-11-10 17:28:31 UTC (rev 9865)
@@ -167,23 +167,35 @@
 
    class CursorIterator implements LinkedListIterator<PagedReference>
    {
-      PagePosition position = null;
+      private PagePosition position = null;
 
-      PagePosition lastOperation = null;
+      private PagePosition lastOperation = null;
 
-      LinkedListIterator<PagePosition> redeliveryIterator = redeliveries.iterator();
+      private final LinkedListIterator<PagePosition> redeliveryIterator;
 
-      boolean isredelivery = false;
+      private volatile boolean isredelivery = false;
       
       /** next element taken on hasNext test.
        *  it has to be delivered on next next operation */
-      PagedReference cachedNext;
+      private volatile PagedReference cachedNext;
+      
+      public CursorIterator()
+      {
+         synchronized (redeliveries)
+         {
+            redeliveryIterator = redeliveries.iterator();
+         }
+      }
+      
 
       public void repeat()
       {
          if (isredelivery)
          {
-            redeliveryIterator.repeat();
+            synchronized (redeliveries)
+            {
+               redeliveryIterator.repeat();
+            }
          }
          else
          {
@@ -214,16 +226,19 @@
          
          try
          {
-            if (redeliveryIterator.hasNext())
+            synchronized (redeliveries)
             {
-               // There's a redelivery pending, we will get it out of that pool instead
-               isredelivery = true;
-               return getReference(redeliveryIterator.next());
+               if (redeliveryIterator.hasNext())
+               {
+                  // There's a redelivery pending, we will get it out of that pool instead
+                  isredelivery = true;
+                  return getReference(redeliveryIterator.next());
+               }
+               else
+               {
+                  isredelivery = false;
+               }
             }
-            else
-            {
-               isredelivery = false;
-            }
             
             if (position == null)
             {
@@ -448,9 +463,12 @@
    /* (non-Javadoc)
     * @see org.hornetq.core.paging.cursor.PageCursor#returnElement(org.hornetq.core.paging.cursor.PagePosition)
     */
-   public synchronized void redeliver(final PagePosition position)
+   public void redeliver(final PagePosition position)
    {
-      redeliveries.addTail(position);
+      synchronized (redeliveries)
+      {
+         redeliveries.addTail(position);
+      }
    }
 
    /** 



More information about the hornetq-commits mailing list