summaryrefslogtreecommitdiff
path: root/qpid/cpp
diff options
context:
space:
mode:
authorStephen D. Huston <shuston@apache.org>2009-09-17 19:37:35 +0000
committerStephen D. Huston <shuston@apache.org>2009-09-17 19:37:35 +0000
commit50ab0b7208b7863230a6e1cbbeb7393e365e4dc5 (patch)
tree45bceed7804585667a888c9986de1a36c6021996 /qpid/cpp
parentb2d40ca499e2e0a4cee09810c862facf08a70b0c (diff)
downloadqpid-python-50ab0b7208b7863230a6e1cbbeb7393e365e4dc5.tar.gz
Add console control handler to properly shut down broker on ^C et al; fixes QPID-2109
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@816348 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
-rw-r--r--qpid/cpp/src/windows/QpiddBroker.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/qpid/cpp/src/windows/QpiddBroker.cpp b/qpid/cpp/src/windows/QpiddBroker.cpp
index 5c6eef48f8..5bf9477e6a 100644
--- a/qpid/cpp/src/windows/QpiddBroker.cpp
+++ b/qpid/cpp/src/windows/QpiddBroker.cpp
@@ -133,6 +133,14 @@ void ShutdownHandler::run() {
}
}
+// Console control handler to properly handle ctl-c.
+BOOL CtrlHandler(DWORD ctl)
+{
+ ShutdownEvent shutter; // no pid specified == shut me down
+ shutter.signal();
+ return ((ctl == CTRL_C_EVENT || ctl == CTRL_CLOSE_EVENT) ? TRUE : FALSE);
+}
+
}
struct ProcessControlOptions : public qpid::Options {
@@ -245,6 +253,7 @@ int QpiddBroker::execute (QpiddOptions *options) {
ShutdownHandler waitShut(brokerPtr);
qpid::sys::Thread waitThr(waitShut); // Wait for shutdown event
+ SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE);
brokerPtr->run();
waitShut.signal(); // In case we shut down some other way
waitThr.join();