Author: tabish
Date: Thu May 10 23:32:19 2012
New Revision: 1336956

URL: http://svn.apache.org/viewvc?rev=1336956&view=rev
Log:
work around a race condition. 

Modified:
    
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp

Modified: 
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
URL: 
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp?rev=1336956&r1=1336955&r2=1336956&view=diff
==============================================================================
--- 
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
 (original)
+++ 
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
 Thu May 10 23:32:19 2012
@@ -424,7 +424,9 @@ Pointer<SessionId> ActiveMQConnection::g
 
////////////////////////////////////////////////////////////////////////////////
 void ActiveMQConnection::addSession(Pointer<ActiveMQSessionKernel> session) {
     try {
-        this->config->activeSessions.add(session);
+        synchronized(&this->config->activeSessions) {
+            this->config->activeSessions.add(session);
+        }
     }
     AMQ_CATCH_ALL_THROW_CMSEXCEPTION()
 }
@@ -432,7 +434,9 @@ void ActiveMQConnection::addSession(Poin
 
////////////////////////////////////////////////////////////////////////////////
 void ActiveMQConnection::removeSession(Pointer<ActiveMQSessionKernel> session) 
{
     try {
-        this->config->activeSessions.remove(session);
+        synchronized(&this->config->activeSessions) {
+            this->config->activeSessions.remove(session);
+        }
     }
     AMQ_CATCH_ALL_THROW_CMSEXCEPTION()
 }
@@ -618,10 +622,13 @@ void ActiveMQConnection::start() {
         // and not acknowledged.
         if (this->started.compareAndSet(false, true)) {
 
-            // Start all the sessions.
-            std::auto_ptr<Iterator< Pointer<ActiveMQSessionKernel> > > 
iter(this->config->activeSessions.iterator());
-            while (iter->hasNext()) {
-                iter->next()->start();
+            synchronized(&this->config->activeSessions) {
+
+                // Start all the sessions.
+                std::auto_ptr<Iterator< Pointer<ActiveMQSessionKernel> > > 
iter(this->config->activeSessions.iterator());
+                while (iter->hasNext()) {
+                    iter->next()->start();
+                }
             }
         }
     }


Reply via email to