[jboss-cvs] JBoss Messaging SVN: r8383 - branches/Branch_1_4/src/main/org/jboss/jms/server/endpoint.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jul 11 22:13:49 EDT 2011


Author: gaohoward
Date: 2011-07-11 22:13:49 -0400 (Mon, 11 Jul 2011)
New Revision: 8383

Modified:
   branches/Branch_1_4/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
Log:
JBMESSAGING-1885


Modified: branches/Branch_1_4/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2011-07-07 12:44:44 UTC (rev 8382)
+++ branches/Branch_1_4/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2011-07-12 02:13:49 UTC (rev 8383)
@@ -197,6 +197,9 @@
    private boolean isCC = false;
    
    private boolean markClose = false;
+   
+   //https://issues.jboss.org/browse/JBMESSAGING-1885
+   private Object txLock = new Object();
 
    // Constructors ---------------------------------------------------------------------------------
 
@@ -512,18 +515,25 @@
          // deliveries must be cancelled in reverse order
 
          Set channels = new HashSet();
-
-         for (int i = cancels.size() - 1; i >= 0; i--)
+         
+         //https://issues.jboss.org/browse/JBMESSAGING-1885
+         synchronized (txLock)
          {
-            Cancel cancel = (Cancel)cancels.get(i);
+            for (int i = cancels.size() - 1; i >= 0; i--)
+            {
+               Cancel cancel = (Cancel)cancels.get(i);
 
-            if (trace) { log.trace(this + " cancelling delivery " + cancel.getDeliveryId()); }
+               if (trace)
+               {
+                  log.trace(this + " cancelling delivery " + cancel.getDeliveryId());
+               }
 
-            Delivery del = cancelDeliveryInternal(cancel);
+               Delivery del = cancelDeliveryInternal(cancel);
 
-            if (del != null)
-            {
-            	channels.add(del.getObserver());
+               if (del != null)
+               {
+                  channels.add(del.getObserver());
+               }
             }
          }
 
@@ -2554,11 +2564,19 @@
       {
          // Remove the deliveries from the delivery map.
          Iterator iter = delList.iterator();
+         
+         synchronized(txLock)
+         {
          while (iter.hasNext())
          {
             Long deliveryId = (Long)iter.next();
 
             DeliveryRecord del = (DeliveryRecord)deliveries.remove(deliveryId);
+            
+            if (del == null)
+            {
+               throw new TransactionException("transaction rolled back because deliveries has been cancelled by the session.");
+            }
 
             if (del != null && del.replicating)
             {
@@ -2586,6 +2604,7 @@
                }
             }
          }
+         }
       }
 
       public void afterRollback(boolean onePhase) throws TransactionException



More information about the jboss-cvs-commits mailing list