Author: gsim
Date: Thu Oct  8 19:04:05 2009
New Revision: 823279

URL: http://svn.apache.org/viewvc?rev=823279&view=rev
Log:
QPID-2132: further fix from Ken Giusti.


Modified:
    qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
    qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.h

Modified: qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp?rev=823279&r1=823278&r2=823279&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp Thu Oct  8 
19:04:05 2009
@@ -89,11 +89,12 @@
 
 ManagementAgentImpl::~ManagementAgentImpl()
 {
-    // shutdown the connection thread
+    // shutdown & cleanup all threads
     connThreadBody.close();
-    connThread.join();
+    pubThreadBody.close();
 
-    // @todo need to shutdown pubThread?
+    connThread.join();
+    pubThread.join();
 
     // Release the memory associated with stored management objects.
     {
@@ -907,8 +908,13 @@
 
 void ManagementAgentImpl::PublishThread::run()
 {
-    while (true) {
+    uint16_t    totalSleep;
+
+    while (!shutdown) {
         agent.periodicProcessing();
-        ::sleep(agent.getInterval());
+        totalSleep = 0;
+        while (totalSleep++ < agent.getInterval() && !shutdown) {
+            ::sleep(1);
+        }
     }
 }

Modified: qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.h?rev=823279&r1=823278&r2=823279&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/agent/ManagementAgentImpl.h Thu Oct  8 
19:04:05 2009
@@ -194,8 +194,11 @@
     {
         ManagementAgentImpl& agent;
         void run();
+        bool shutdown;
     public:
-        PublishThread(ManagementAgentImpl& _agent) : agent(_agent) {}
+        PublishThread(ManagementAgentImpl& _agent) :
+            agent(_agent), shutdown(false) {}
+        void close() { shutdown = true; }
     };
 
     ConnectionThread connThreadBody;



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscr...@qpid.apache.org

Reply via email to