summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-11-02 15:25:27 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-11-02 15:25:27 +0100
commite663e0abf48efb07fe7ed644ae27e624e207e5c2 (patch)
tree3a28d0d235da7d9872bef049775893d1d0f5ec1f
parent1da192165c145805c32e2e13afbccc52b8a76ab6 (diff)
downloadabrt-e663e0abf48efb07fe7ed644ae27e624e207e5c2.tar.gz
abrt-e663e0abf48efb07fe7ed644ae27e624e207e5c2.tar.xz
abrt-e663e0abf48efb07fe7ed644ae27e624e207e5c2.zip
abrtd: fix bad interaction with -T SEC code and !-d
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--src/Daemon/Daemon.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp
index 188cd0d1..0e81dfdc 100644
--- a/src/Daemon/Daemon.cpp
+++ b/src/Daemon/Daemon.cpp
@@ -106,8 +106,9 @@ typedef struct cron_callback_data_t
} cron_callback_data_t;
-static uint8_t s_sig_caught;
+static uint8_t s_sig_caught; /* must be one byte */
static int s_signal_pipe[2];
+static int s_signal_pipe_write = -1;
static unsigned s_timeout;
static bool s_exiting;
@@ -443,10 +444,12 @@ static int Lock()
/* we leak opened lfd intentionally */
}
-static void handle_fatal_signal(int signal)
+static void handle_fatal_signal(int signo)
{
- s_sig_caught = signal;
- write(s_signal_pipe[1], &s_sig_caught, 1);
+ s_sig_caught = signo;
+ VERB3 log("Got signal %d", signo);
+ if (s_signal_pipe_write >= 0)
+ write(s_signal_pipe_write, &s_sig_caught, 1);
}
/* Signal pipe handler */
@@ -458,6 +461,7 @@ static gboolean handle_signal_cb(GIOChannel *gio, GIOCondition condition, gpoint
if (len == 1)
{
/* we did receive a signal */
+ VERB3 log("Got signal %d through signal pipe", signo);
s_exiting = 1;
return TRUE;
}
@@ -828,6 +832,9 @@ int main(int argc, char** argv)
start_syslog_logging();
}
+ /* Only now we want signal pipe to work */
+ s_signal_pipe_write = s_signal_pipe[1];
+
/* Enter the event loop */
try
{