You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2012/04/18 23:07:35 UTC

svn commit: r1327683 - in /activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/failover: CloseTransportsTask.cpp CloseTransportsTask.h

Author: tabish
Date: Wed Apr 18 21:07:34 2012
New Revision: 1327683

URL: http://svn.apache.org/viewvc?rev=1327683&view=rev
Log:
fix for: https://issues.apache.org/jira/browse/AMQCPP-376

Modified:
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/failover/CloseTransportsTask.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/failover/CloseTransportsTask.h

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/failover/CloseTransportsTask.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/failover/CloseTransportsTask.cpp?rev=1327683&r1=1327682&r2=1327683&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/failover/CloseTransportsTask.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/failover/CloseTransportsTask.cpp Wed Apr 18 21:07:34 2012
@@ -30,7 +30,8 @@ using namespace decaf::util;
 using namespace decaf::util::concurrent;
 
 ////////////////////////////////////////////////////////////////////////////////
-CloseTransportsTask::CloseTransportsTask() : transports() {
+CloseTransportsTask::CloseTransportsTask() :
+    transports() {
 
 }
 
@@ -40,42 +41,31 @@ CloseTransportsTask::~CloseTransportsTas
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void CloseTransportsTask::add( const Pointer<Transport>& transport ) {
-    synchronized( &transports ) {
-        transports.push( transport );
-    }
+void CloseTransportsTask::add(const Pointer<Transport>& transport) {
+    transports.put(transport);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 bool CloseTransportsTask::isPending() const {
-
     bool result = false;
-
-    synchronized( &transports ) {
-        result = !transports.isEmpty();
-    }
-
+    result = !transports.isEmpty();
     return result;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 bool CloseTransportsTask::iterate() {
 
-    synchronized( &transports ) {
+    if (!transports.isEmpty()) {
+        Pointer<Transport> transport = transports.take();
 
-        if( !transports.isEmpty() ) {
-            Pointer<Transport> transport = transports.pop();
-
-            try{
-                transport->close();
-            }
-            AMQ_CATCHALL_NOTHROW()
-
-            transport.reset( NULL );
-
-            return !transports.isEmpty();
+        try {
+            transport->close();
         }
+        AMQ_CATCHALL_NOTHROW()
+
+        transport.reset(NULL);
 
+        return !transports.isEmpty();
     }
 
     return false;

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/failover/CloseTransportsTask.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/failover/CloseTransportsTask.h?rev=1327683&r1=1327682&r2=1327683&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/failover/CloseTransportsTask.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/failover/CloseTransportsTask.h Wed Apr 18 21:07:34 2012
@@ -22,7 +22,7 @@
 #include <activemq/threads/CompositeTask.h>
 #include <activemq/transport/Transport.h>
 
-#include <decaf/util/LinkedList.h>
+#include <decaf/util/concurrent/LinkedBlockingQueue.h>
 #include <decaf/lang/Pointer.h>
 
 namespace activemq {
@@ -30,12 +30,11 @@ namespace transport {
 namespace failover {
 
     using decaf::lang::Pointer;
-    using decaf::util::LinkedList;
 
     class AMQCPP_API CloseTransportsTask: public activemq::threads::CompositeTask {
     private:
 
-        mutable LinkedList< Pointer<Transport> > transports;
+        mutable decaf::util::concurrent::LinkedBlockingQueue< Pointer<Transport> > transports;
 
     public:
 
@@ -46,7 +45,7 @@ namespace failover {
         /**
          * Add a new Transport to close.
          */
-        void add( const Pointer<Transport>& transport );
+        void add(const Pointer<Transport>& transport);
 
         /**
          * This Task is pending if there are transports in the Queue that need to be