[hornetq-commits] JBoss hornetq SVN: r7971 - trunk/src/main/org/hornetq/jms/bridge/impl.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Sep 18 12:11:14 EDT 2009


Author: jmesnil
Date: 2009-09-18 12:11:12 -0400 (Fri, 18 Sep 2009)
New Revision: 7971

Modified:
   trunk/src/main/org/hornetq/jms/bridge/impl/JMSBridgeImpl.java
Log:
HORNETQ-27: Race condition in JMS Bridge between enlisting the XAResource in the TX and message delivery

* make sure the SoureReceiver thread is joined when the bridge is stopped

Modified: trunk/src/main/org/hornetq/jms/bridge/impl/JMSBridgeImpl.java
===================================================================
--- trunk/src/main/org/hornetq/jms/bridge/impl/JMSBridgeImpl.java	2009-09-18 14:02:22 UTC (rev 7970)
+++ trunk/src/main/org/hornetq/jms/bridge/impl/JMSBridgeImpl.java	2009-09-18 16:11:12 UTC (rev 7971)
@@ -135,6 +135,8 @@
    
    private Thread checkerThread;
    
+   private Thread sourceReceiver;
+
    private long batchExpiryTime;
    
    private boolean paused;         
@@ -276,8 +278,8 @@
             if (trace) { log.trace("Started time checker thread"); }
          }            
          
-         Thread receiver = new SourceReceiver();
-         receiver.start();
+         sourceReceiver = new SourceReceiver();
+         sourceReceiver.start();
          
          if (trace) { log.trace("Started " + this); }
       }
@@ -308,6 +310,11 @@
          {
             checkerThread.interrupt();
          }
+         
+         if (sourceReceiver != null)
+         {
+            sourceReceiver.interrupt();
+         }
       }
             
       //This must be outside sync block
@@ -320,6 +327,16 @@
          if (trace) { log.trace("Checker thread has finished"); }
       }
       
+      //This must be outside sync block
+      if (sourceReceiver != null)
+      {  
+         if (trace) { log.trace("Waiting for source receiver thread to finish");}
+         
+         sourceReceiver.join();
+         
+         if (trace) { log.trace("Source receiver thread has finished"); }
+      }
+      
       if (tx != null)
       {
          //Terminate any transaction
@@ -1426,11 +1443,11 @@
       @Override
       public void run()
       {
-         while(isStarted())
+         while(started)
          {
             synchronized (lock)
             {
-               if (isPaused() || failed)
+               if (paused || failed)
                {
                   try
                   {



More information about the hornetq-commits mailing list