diff --git a/debian/changelog b/debian/changelog index 13046a3..8608e6d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,6 @@ applauncherd (1.0.4) unstable; urgency=low - * + * Fixes: NB#276265 - After SSU with build version 20.2011.32-0.REQ.759009, applications running in the background and foreground are crashing -- Alexey Shilov Mon, 15 Aug 2011 11:30:49 +0300 diff --git a/src/launcherlib/daemon.cpp b/src/launcherlib/daemon.cpp index 104db14..08d6d5b 100644 --- a/src/launcherlib/daemon.cpp +++ b/src/launcherlib/daemon.cpp @@ -765,16 +765,14 @@ void Daemon::killBoosters() void Daemon::setUnixSignalHandler(int signum, sighandler_t handler) { - struct sigaction *oldAct = new struct sigaction(); - struct sigaction newAct; + sighandler_t old_handler = signal(signum, handler); - newAct.sa_handler = handler; - sigemptyset(&newAct.sa_mask); - newAct.sa_flags |= SA_RESTART; - if (sigaction(signum, &newAct, oldAct) == 0) + if (old_handler != SIG_ERR) + { + m_originalSigHandlers[signum] = old_handler; + } + else { - m_originalSigHandlers[signum] = oldAct; - } else { 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++ ) { - sigaction(it->first, it->second, NULL); + signal(it->first, it->second); } m_originalSigHandlers.clear(); diff --git a/src/launcherlib/daemon.h b/src/launcherlib/daemon.h index fd25365..59b1497 100644 --- a/src/launcherlib/daemon.h +++ b/src/launcherlib/daemon.h @@ -232,7 +232,7 @@ private: SingleInstance * m_singleInstance; //! Original unix signal handlers are saved here - typedef map SigHandlerMap; + typedef map SigHandlerMap; SigHandlerMap m_originalSigHandlers; #ifdef UNIT_TEST