summaryrefslogtreecommitdiff
path: root/src/posix
diff options
context:
space:
mode:
authorChristian Pointner <equinox@anytun.org>2010-01-20 06:52:41 +0000
committerChristian Pointner <equinox@anytun.org>2010-01-20 06:52:41 +0000
commit1bdddd7da2ebe39b0b817e08673aef7756438796 (patch)
treedf35725629db0a5a056e3168207b89aade1e3132 /src/posix
parentfixed signal handler on windows (diff)
moved from SignalHandler Classes to boost::functions
Diffstat (limited to 'src/posix')
-rw-r--r--src/posix/signalHandler.hpp94
1 files changed, 32 insertions, 62 deletions
diff --git a/src/posix/signalHandler.hpp b/src/posix/signalHandler.hpp
index 92a66bd..d52b4d6 100644
--- a/src/posix/signalHandler.hpp
+++ b/src/posix/signalHandler.hpp
@@ -37,73 +37,43 @@
#include <boost/thread.hpp>
#include <boost/bind.hpp>
-class SigIntHandler : public SignalHandler
+int SigIntHandler(const SigNum& /*sig*/, const std::string& /*msg*/)
{
-public:
- SigIntHandler() : SignalHandler(SIGINT) {}
- int handle()
- {
- cLog.msg(Log::PRIO_NOTICE) << "SIG-Int caught, exiting";
- return 1;
- }
-};
+ cLog.msg(Log::PRIO_NOTICE) << "SIG-Int caught, exiting";
+ return 1;
+}
-class SigQuitHandler : public SignalHandler
+int SigQuitHandler(const SigNum& /*sig*/, const std::string& /*msg*/)
{
-public:
- SigQuitHandler() : SignalHandler(SIGQUIT) {}
- int handle()
- {
- cLog.msg(Log::PRIO_NOTICE) << "SIG-Quit caught, exiting";
- return 1;
- }
-};
+ cLog.msg(Log::PRIO_NOTICE) << "SIG-Quit caught, exiting";
+ return 1;
+}
-class SigHupHandler : public SignalHandler
+int SigHupHandler(const SigNum& /*sig*/, const std::string& /*msg*/)
{
-public:
- SigHupHandler() : SignalHandler(SIGHUP) {}
- int handle()
- {
- cLog.msg(Log::PRIO_NOTICE) << "SIG-Hup caught";
- return 0;
- }
-};
+ cLog.msg(Log::PRIO_NOTICE) << "SIG-Hup caught";
+ return 0;
+}
-class SigUsr1Handler : public SignalHandler
+int SigTermHandler(const SigNum& /*sig*/, const std::string& /*msg*/)
{
-public:
- SigUsr1Handler() : SignalHandler(SIGUSR1) {}
- int handle()
- {
- cLog.msg(Log::PRIO_NOTICE) << "SIG-Term caught, exiting";
- return 1;
- }
-};
+ cLog.msg(Log::PRIO_NOTICE) << "SIG-Term caught, exiting";
+ return 1;
+}
-class SigUsr2Handler : public SignalHandler
+int SigUsr1Handler(const SigNum& /*sig*/, const std::string& /*msg*/)
{
-public:
- SigUsr2Handler() : SignalHandler(SIGUSR2) {}
- int handle()
- {
- cLog.msg(Log::PRIO_NOTICE) << "SIG-Usr1 caught";
- return 0;
- }
-};
+ cLog.msg(Log::PRIO_NOTICE) << "SIG-Usr1 caught";
+ return 0;
+}
-class SigTermHandler : public SignalHandler
+int SigUsr2Handler(const SigNum& /*sig*/, const std::string& /*msg*/)
{
-public:
- SigTermHandler() : SignalHandler(SIGTERM) {}
- int handle()
- {
- cLog.msg(Log::PRIO_NOTICE) << "SIG-Usr2 caught";
- return 0;
- }
-};
+ cLog.msg(Log::PRIO_NOTICE) << "SIG-Usr2 caught";
+ return 0;
+}
-void handle()
+void handleSignal()
{
sigset_t signal_set;
int sigNum;
@@ -138,14 +108,14 @@ void registerSignalHandler(SignalController& ctrl)
#error The signalhandler works only with pthreads
#endif
- boost::thread(boost::bind(handle));
+ boost::thread(boost::bind(handleSignal));
- ctrl.handler[SIGINT] = new SigIntHandler;
- ctrl.handler[SIGQUIT] = new SigQuitHandler;
- ctrl.handler[SIGHUP] = new SigHupHandler;
- ctrl.handler[SIGTERM] = new SigTermHandler;
- ctrl.handler[SIGUSR1] = new SigUsr1Handler;
- ctrl.handler[SIGUSR2] = new SigUsr2Handler;
+ ctrl.handler[SIGINT] = boost::bind(SigIntHandler, _1, _2);
+ ctrl.handler[SIGQUIT] = boost::bind(SigQuitHandler, _1, _2);
+ ctrl.handler[SIGHUP] = boost::bind(SigHupHandler, _1, _2);
+ ctrl.handler[SIGTERM] = boost::bind(SigTermHandler, _1, _2);
+ ctrl.handler[SIGUSR1] = boost::bind(SigUsr1Handler, _1, _2);
+ ctrl.handler[SIGUSR2] = boost::bind(SigUsr2Handler, _1, _2);
cLog.msg(Log::PRIO_DEBUG) << "signal handlers are now registered";
}