From 1e119f37b85b90c5a9a17fdcbc80625727b4ab66 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 15 Dec 2009 19:54:51 +0100 Subject: fix all instances of atoi() usage Signed-off-by: Denys Vlasenko --- src/Daemon/Daemon.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/Daemon/Daemon.cpp') diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp index 153363d..db55f84 100644 --- a/src/Daemon/Daemon.cpp +++ b/src/Daemon/Daemon.cpp @@ -216,14 +216,14 @@ static int SetUpCron() std::string sM = ""; sH = it_c->first.substr(0, pos); - nH = atoi(sH.c_str()); + nH = xatou(sH.c_str()); nH = nH > 23 ? 23 : nH; nH = nH < 0 ? 0 : nH; nM = nM > 59 ? 59 : nM; nM = nM < 0 ? 0 : nM; timeout += nH * 60 * 60; sM = it_c->first.substr(pos + 1); - nM = atoi(sM.c_str()); + nM = xatou(sM.c_str()); timeout += nM * 60; } else @@ -231,7 +231,7 @@ static int SetUpCron() std::string sS = ""; sS = it_c->first; - nS = atoi(sS.c_str()); + nS = xatou(sS.c_str()); nS = nS <= 0 ? 1 : nS; timeout = nS; } -- cgit From 480a51ae268f32d61b6c32afa8ba92ec56f512d9 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 17 Dec 2009 12:54:49 +0100 Subject: remove unsafe log() from signal handler Signed-off-by: Denys Vlasenko --- src/Daemon/Daemon.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/Daemon/Daemon.cpp') diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp index db55f84..8c7d009 100644 --- a/src/Daemon/Daemon.cpp +++ b/src/Daemon/Daemon.cpp @@ -400,7 +400,8 @@ static int Lock() static void handle_fatal_signal(int signo) { s_sig_caught = signo; - VERB3 log("Got signal %d", signo); + // Enable for debug only, malloc & printf are unsafe in signal handlers + //VERB3 log("Got signal %d", signo); if (s_signal_pipe_write >= 0) write(s_signal_pipe_write, &s_sig_caught, 1); } -- cgit From 1341f0c56cf70700e997075239b8ad7f108a611f Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 17 Dec 2009 13:54:23 +0100 Subject: further robustification of signal handler Signed-off-by: Denys Vlasenko --- src/Daemon/Daemon.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/Daemon/Daemon.cpp') diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp index 8c7d009..5c1a7ac 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 */ -- cgit From 2adefe9ca05ec2854450cf5875a8e57159e6953f Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 17 Dec 2009 18:08:30 +0100 Subject: made s_signal_caught volatile Signed-off-by: Denys Vlasenko --- src/Daemon/Daemon.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Daemon/Daemon.cpp') diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp index 5c1a7ac..1e934bc 100644 --- a/src/Daemon/Daemon.cpp +++ b/src/Daemon/Daemon.cpp @@ -110,7 +110,7 @@ typedef struct cron_callback_data_t } cron_callback_data_t; -static uint8_t s_sig_caught; /* must be one byte */ +static volatile sig_atomic_t s_sig_caught; static int s_signal_pipe[2]; static int s_signal_pipe_write = -1; static unsigned s_timeout; -- cgit