Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-02-02 11:09:04 +0000
committerStijn Buys <ingar@osirion.org>2008-02-02 11:09:04 +0000
commit365b0c6330ea607706b708d92da7a46b1ed1fb15 (patch)
tree67e8136d48e8e7f0c5bdc17b4a2c284dcf202641 /src/core
parent6c8446cddb37df732fc9e5fc21f98e31968ce634 (diff)
introduced libsys
implemented signal handling
Diffstat (limited to 'src/core')
-rw-r--r--src/core/Makefile.am2
-rw-r--r--src/core/applicationinterface.cc30
2 files changed, 30 insertions, 2 deletions
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 <iostream>
#include <stdlib.h>
+#include <errno.h>
+#include <signal.h>
+
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;
}