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;