From fdab30f13ec956b800d5d89357799f4fd55c0274 Mon Sep 17 00:00:00 2001 From: Alexey Shilov Date: Mon, 15 Aug 2011 11:26:45 +0300 Subject: [PATCH] Fixes: NB#276265 - After SSU with build version 20.2011.32-0.REQ.759009, applications running in the background and foreground are crashing RevBy: Pertti Kellomaki --- debian/changelog | 2 +- src/launcherlib/daemon.cpp | 16 +++++++--------- src/launcherlib/daemon.h | 2 +- 3 files changed, 9 insertions(+), 11 deletions(-) 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