summaryrefslogtreecommitdiffstats
path: root/src/Daemon
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-12-17 13:54:23 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-12-17 13:54:23 +0100
commit1341f0c56cf70700e997075239b8ad7f108a611f (patch)
treeb92a2eb688d7c72666f167022b2b1e6166948040 /src/Daemon
parent5c5215b8c213cd68523813258f7e70313034f081 (diff)
downloadabrt-1341f0c56cf70700e997075239b8ad7f108a611f.tar.gz
abrt-1341f0c56cf70700e997075239b8ad7f108a611f.tar.xz
abrt-1341f0c56cf70700e997075239b8ad7f108a611f.zip
further robustification of signal handler
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src/Daemon')
-rw-r--r--src/Daemon/Daemon.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp
index 8c7d0095..5c1a7ace 100644
--- a/src/Daemon/Daemon.cpp
+++ b/src/Daemon/Daemon.cpp
@@ -399,11 +399,15 @@ static int Lock()
static void handle_fatal_signal(int signo)
{
- s_sig_caught = signo;
- // Enable for debug only, malloc & printf are unsafe in signal handlers
+ // Enable for debugging only, malloc/printf are unsafe in signal handlers
//VERB3 log("Got signal %d", signo);
+
+ uint8_t l_sig_caught;
+ s_sig_caught = l_sig_caught = signo;
+ /* Using local copy of s_sig_caught so that concurrent signal
+ * won't change it under us */
if (s_signal_pipe_write >= 0)
- write(s_signal_pipe_write, &s_sig_caught, 1);
+ write(s_signal_pipe_write, &l_sig_caught, 1);
}
/* Signal pipe handler */