From 591078f9c90100b1f6926bdac55877aa864f2238 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Tue, 10 Mar 2009 14:38:34 +0000 Subject: added SIGERROR to signal Controller --- src/signalController.cpp | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'src/signalController.cpp') diff --git a/src/signalController.cpp b/src/signalController.cpp index e8d231e..b2017fd 100644 --- a/src/signalController.cpp +++ b/src/signalController.cpp @@ -58,6 +58,13 @@ SignalController& SignalController::instance() return *inst; } +int SigErrorHandler::handle(const std::string& msg) +{ + AnytunError::throwErr() << msg; + + return 0; +} + #ifndef _MSC_VER int SigIntHandler::handle() @@ -204,13 +211,15 @@ void SignalController::init() handler[CTRL_LOGOFF_EVENT] = new CtrlLogoffHandler; handler[CTRL_SHUTDOWN_EVENT] = new CtrlShutdownHandler; #endif + + handler[SIGERROR] = new SigErrorHandler; } -void SignalController::inject(int sig) +void SignalController::inject(int sig, const std::string& msg) { { Lock lock(sigQueueMutex); - sigQueue.push(sig); + sigQueue.push(SigPair(sig, msg)); } sigQueueSem.up(); } @@ -219,22 +228,27 @@ int SignalController::run() { while(1) { sigQueueSem.down(); - int sigNum; + SigPair sig; { Lock lock(sigQueueMutex); - sigNum = sigQueue.front(); + sig = sigQueue.front(); sigQueue.pop(); } - HandlerMap::iterator it = handler.find(sigNum); + HandlerMap::iterator it = handler.find(sig.first); if(it != handler.end()) { - int ret = it->second->handle(); + int ret; + if(sig.second == "") + ret = it->second->handle(); + else + ret = it->second->handle(sig.second); + if(ret) return ret; } else - cLog.msg(Log::PRIO_NOTICE) << "SIG " << sigNum << " caught - ignoring"; + cLog.msg(Log::PRIO_NOTICE) << "SIG " << sig.first << " caught with message '" << sig.second << "'- ignoring"; } return 0; } -- cgit v1.2.3