activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tab...@apache.org
Subject svn commit: r886347 - in /activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/threads: CompositeTaskRunner.cpp DedicatedTaskRunner.cpp
Date Thu, 03 Dec 2009 00:28:49 GMT
Author: tabish
Date: Thu Dec  3 00:28:46 2009
New Revision: 886347

URL: http://svn.apache.org/viewvc?rev=886347&view=rev
Log:
Add code to allow the TaskRunner to be shutdown from its own tasks thread, otherwise there's
a risk of a deadlock should the user create code that allows this path to execute.  This was
causing a deadlock on Windows when testing the inactivity monitor and a read error was detected
asynchronously. 

Modified:
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/threads/CompositeTaskRunner.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/threads/DedicatedTaskRunner.cpp

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/threads/CompositeTaskRunner.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/threads/CompositeTaskRunner.cpp?rev=886347&r1=886346&r2=886347&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/threads/CompositeTaskRunner.cpp
(original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/threads/CompositeTaskRunner.cpp
Thu Dec  3 00:28:46 2009
@@ -59,7 +59,7 @@
 
         // Wait till the thread stops ( no need to wait if shutdown
         // is called from thread that is shutting down)
-        if( !threadTerminated ) {
+        if( Thread::currentThread() != this->thread.get() && !threadTerminated
) {
             mutex.wait( timeout );
         }
     }
@@ -74,8 +74,9 @@
         mutex.notifyAll();
     }
 
-    // Wait till the thread stops
-    if( !threadTerminated ) {
+    // Wait till the thread stops ( no need to wait if shutdown
+    // is called from thread that is shutting down)
+    if( Thread::currentThread() != this->thread.get() && !threadTerminated ) {
         this->thread->join();
     }
 }

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/threads/DedicatedTaskRunner.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/threads/DedicatedTaskRunner.cpp?rev=886347&r1=886346&r2=886347&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/threads/DedicatedTaskRunner.cpp
(original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/threads/DedicatedTaskRunner.cpp
Thu Dec  3 00:28:46 2009
@@ -60,7 +60,7 @@
 
         // Wait till the thread stops ( no need to wait if shutdown
         // is called from thread that is shutting down)
-        if( !threadTerminated ) {
+        if( Thread::currentThread() != this->thread.get() && !threadTerminated
) {
             mutex.wait( timeout );
         }
     }
@@ -75,8 +75,9 @@
         mutex.notifyAll();
     }
 
-    // Wait till the thread stops
-    if( !threadTerminated ) {
+    // Wait till the thread stops ( no need to wait if shutdown
+    // is called from thread that is shutting down)
+    if( Thread::currentThread() != this->thread.get() && !threadTerminated ) {
         this->thread->join();
     }
 }



Mime
View raw message