|
|
|
@ -765,16 +765,14 @@ void Daemon::killBoosters()
|
|
|
|
|
|
|
|
|
|
|
|
void Daemon::setUnixSignalHandler(int signum, sighandler_t handler)
|
|
|
|
void Daemon::setUnixSignalHandler(int signum, sighandler_t handler)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
struct sigaction *oldAct = new struct sigaction();
|
|
|
|
sighandler_t old_handler = signal(signum, handler);
|
|
|
|
struct sigaction newAct;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
newAct.sa_handler = handler;
|
|
|
|
if (old_handler != SIG_ERR)
|
|
|
|
sigemptyset(&newAct.sa_mask);
|
|
|
|
{
|
|
|
|
newAct.sa_flags |= SA_RESTART;
|
|
|
|
m_originalSigHandlers[signum] = old_handler;
|
|
|
|
if (sigaction(signum, &newAct, oldAct) == 0)
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
m_originalSigHandlers[signum] = oldAct;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
throw std::runtime_error("Daemon: Failed to set signal handler");
|
|
|
|
throw std::runtime_error("Daemon: Failed to set signal handler");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -783,7 +781,7 @@ void Daemon::restoreUnixSignalHandlers()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
for (SigHandlerMap::iterator it = m_originalSigHandlers.begin(); it != m_originalSigHandlers.end(); it++ )
|
|
|
|
for (SigHandlerMap::iterator it = m_originalSigHandlers.begin(); it != m_originalSigHandlers.end(); it++ )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
sigaction(it->first, it->second, NULL);
|
|
|
|
signal(it->first, it->second);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_originalSigHandlers.clear();
|
|
|
|
m_originalSigHandlers.clear();
|
|
|
|
|