summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/SignalHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/broker/SignalHandler.cpp')
-rw-r--r--cpp/src/qpid/broker/SignalHandler.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/cpp/src/qpid/broker/SignalHandler.cpp b/cpp/src/qpid/broker/SignalHandler.cpp
index b565cfd419..16c141f21c 100644
--- a/cpp/src/qpid/broker/SignalHandler.cpp
+++ b/cpp/src/qpid/broker/SignalHandler.cpp
@@ -20,30 +20,34 @@
*/
#include "qpid/broker/SignalHandler.h"
#include "qpid/broker/Broker.h"
+#include "qpid/sys/Mutex.h"
#include <signal.h>
namespace qpid {
namespace broker {
-boost::intrusive_ptr<Broker> SignalHandler::broker;
+// Lock is to ensure that broker is not concurrently set to 0 and
+// deleted while we are in a call to broker->shutdown()
-void SignalHandler::setBroker(const boost::intrusive_ptr<Broker>& b) {
- broker = b;
+sys::Mutex brokerLock;
+Broker* SignalHandler::broker;
+void SignalHandler::setBroker(Broker* b) {
+ sys::Mutex::ScopedLock l(brokerLock);
+ broker = b;
signal(SIGINT,shutdownHandler);
signal(SIGTERM, shutdownHandler);
-
- signal(SIGHUP,SIG_IGN); // TODO aconway 2007-07-18: reload config.
-
+ signal(SIGHUP,SIG_IGN);
signal(SIGCHLD,SIG_IGN);
}
void SignalHandler::shutdown() { shutdownHandler(0); }
void SignalHandler::shutdownHandler(int) {
- if (broker.get()) {
+ sys::Mutex::ScopedLock l(brokerLock);
+ if (broker) {
broker->shutdown();
- broker = 0; // Release the broker reference.
+ broker = 0;
}
}