From 66bfbac2284ade9adce80b278719426a7392f16f Mon Sep 17 00:00:00 2001 From: Yacine Belkadi Date: Wed, 23 Mar 2011 16:09:31 +0100 Subject: cleo/app/managerd: fix possible signal loss, closes #2374 Fix: - a signal may be lost if it occurs in the middle of the decrementation of is_process_signal_needed. - the compiler could optimize operations on is_process_signal_needed in ways that may affect the expected behavior of the code. --- cleopatre/application/managerd/src/managerd.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cleopatre/application/managerd/src/managerd.c b/cleopatre/application/managerd/src/managerd.c index c9d0e44d4a..cb7db96a52 100644 --- a/cleopatre/application/managerd/src/managerd.c +++ b/cleopatre/application/managerd/src/managerd.c @@ -34,7 +34,7 @@ /* Global variable indicating if a SIGHUP signal occurred, * has been caught in managerd signal handler, * and has now to be processed. */ -uint8_t is_process_signal_needed; +volatile sig_atomic_t is_process_signal_needed; /** @@ -48,7 +48,7 @@ managerd_signal_handler (int signal_nb) /* check that we received a SIGHUP signal (other signals must be ignored) */ if (SIGHUP == signal_nb) { - is_process_signal_needed++; + is_process_signal_needed = 1; } } @@ -250,9 +250,10 @@ static int managerd_process(struct managerd_ctx *ctx) if (is_process_signal_needed) { + is_process_signal_needed = 0; + /* now handle all info file changes (from plcd) */ managerd_process_signal (ctx); - is_process_signal_needed--; } } -- cgit v1.2.3