Author: gsim
Date: Fri Dec  1 09:18:54 2006
New Revision: 481305

URL: http://svn.apache.org/viewvc?view=rev&rev=481305
Log:
Re-enable signal handling. Make APRAcceptor::shutdown() threadsafe.


Modified:
    incubator/qpid/trunk/qpid/cpp/lib/common/sys/apr/APRAcceptor.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpidd.cpp

Modified: incubator/qpid/trunk/qpid/cpp/lib/common/sys/apr/APRAcceptor.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/lib/common/sys/apr/APRAcceptor.cpp?view=diff&rev=481305&r1=481304&r2=481305
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/lib/common/sys/apr/APRAcceptor.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/lib/common/sys/apr/APRAcceptor.cpp Fri Dec  1 
09:18:54 2006
@@ -37,11 +37,15 @@
     virtual void shutdown();
 
   private:
+    void shutdownImpl();
+
+  private:
     int16_t port;
     bool trace;
     LFProcessor processor;
     apr_socket_t* socket;
     volatile bool running;
+    Mutex shutdownLock;
 };
 
 // Define generic Acceptor::create() to return APRAcceptor.
@@ -88,22 +92,29 @@
             LFSessionContext* session = new LFSessionContext(APRPool::get(), 
client, &processor, trace);
             session->init(factory->create(session));
         }else{
-            running = false;
-            if(status != APR_EINTR){
-                std::cout << "ERROR: " << get_desc(status) << std::endl;
+            Mutex::ScopedLock locker(shutdownLock);                
+            if(running) {
+                if(status != APR_EINTR){
+                    std::cout << "ERROR: " << get_desc(status) << std::endl;
+                }
+                shutdownImpl();
             }
         }
     }
-    shutdown();
 }
 
 void APRAcceptor::shutdown() {
-    // TODO aconway 2006-10-12: Cleanup, this is not thread safe.
+    Mutex::ScopedLock locker(shutdownLock);                
     if (running) {
-        running = false;
-        processor.stop();
-        CHECK_APR_SUCCESS(apr_socket_close(socket));
+        shutdownImpl();
     }
+}
+
+void APRAcceptor::shutdownImpl() {
+    Mutex::ScopedLock locker(shutdownLock);                
+    running = false;
+    processor.stop();
+    CHECK_APR_SUCCESS(apr_socket_close(socket));
 }
 
 

Modified: incubator/qpid/trunk/qpid/cpp/src/qpidd.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpidd.cpp?view=diff&rev=481305&r1=481304&r2=481305
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpidd.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpidd.cpp Fri Dec  1 09:18:54 2006
@@ -20,7 +20,8 @@
  */
 #include <Broker.h>
 #include <Configuration.h>
-// FIXME #include <sys/signal.h>
+// FIXME 
+#include <signal.h>
 #include <iostream>
 #include <memory>
 
@@ -43,7 +44,8 @@
             config.usage();
         }else{
             broker = Broker::create(config);
-// FIXME             qpid::sys::signal(SIGINT, handle_signal);
+// FIXME             
+            signal(SIGINT, handle_signal);
             broker->run();
         }
         return 0;


Reply via email to