From 365b0c6330ea607706b708d92da7a46b1ed1fb15 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sat, 2 Feb 2008 11:09:04 +0000 Subject: introduced libsys implemented signal handling --- src/core/applicationinterface.cc | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/core/applicationinterface.cc') diff --git a/src/core/applicationinterface.cc b/src/core/applicationinterface.cc index 9ef5c16..ba22d8c 100644 --- a/src/core/applicationinterface.cc +++ b/src/core/applicationinterface.cc @@ -6,14 +6,37 @@ #include "core/core.h" #include "filesystem/filesystem.h" +#include "sys/sys.h" #include "common/common.h" #include #include +#include +#include + namespace core { +extern "C" void signal_handler(int signum) +{ + switch(signum){ + case SIGHUP: + case SIGINT: + case SIGQUIT: + case SIGTERM: + con_warn << "received signal " << signum << ", shutting down..." << std::endl; + if (ApplicationInterface::instance()); + ApplicationInterface::instance()->shutdown(); + exit(1); + break; + default: + con_warn << "received signal " << signum << ", terminated..." << std::endl; + exit(1); + break; + } +} + ApplicationInterface *ApplicationInterface::applicationinterface_instance = 0; ApplicationInterface::ApplicationInterface() { @@ -22,6 +45,11 @@ ApplicationInterface::ApplicationInterface() { exit(2); } applicationinterface_instance = this; + + sys::signal(SIGHUP, signal_handler); + sys::signal(SIGINT, signal_handler); + sys::signal(SIGQUIT, signal_handler); + sys::signal(SIGTERM, signal_handler); } ApplicationInterface::~ApplicationInterface() @@ -29,7 +57,7 @@ ApplicationInterface::~ApplicationInterface() applicationinterface_instance = 0; } -ApplicationInterface *ApplicationInterface::instance() +ApplicationInterface *ApplicationInterface::instance() { return applicationinterface_instance; } -- cgit v1.2.3