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/Makefile.am | 2 +- src/core/applicationinterface.cc | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) (limited to 'src/core') diff --git a/src/core/Makefile.am b/src/core/Makefile.am index b062f9e..8046b79 100644 --- a/src/core/Makefile.am +++ b/src/core/Makefile.am @@ -4,7 +4,7 @@ INCLUDES = -I$(top_srcdir)/src libcore_la_SOURCES = applicationinterface.cc gameinterface.cc libcore_la_LDFLAGS = -avoid-version libcore_la_LIBADD = $(top_builddir)/src/math/libmath.la \ - $(top_builddir)/src/common/libcommon.la \ + $(top_builddir)/src/common/libcommon.la $(top_builddir)/src/sys/libsys.la \ $(top_builddir)/src/filesystem/libfilesystem.la noinst_LTLIBRARIES = libcore.la 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