summaryrefslogtreecommitdiffstats
path: root/daemons/cmirrord/clogd.c
diff options
context:
space:
mode:
authorAlasdair Kergon <agk@redhat.com>2010-01-19 15:58:45 +0000
committerAlasdair Kergon <agk@redhat.com>2010-01-19 15:58:45 +0000
commitfc0c0cb075fde50083421c9ad0fb936b2b77b63b (patch)
tree3d8beb25b90d7bbe69a8b84f8a79236cbeeebb53 /daemons/cmirrord/clogd.c
parent7a965168193968fd1a34c766f0b435e4f08ef4ac (diff)
downloadlvm2-fc0c0cb075fde50083421c9ad0fb936b2b77b63b.tar.gz
lvm2-fc0c0cb075fde50083421c9ad0fb936b2b77b63b.tar.xz
lvm2-fc0c0cb075fde50083421c9ad0fb936b2b77b63b.zip
Signal handling FIXMEs.
A few integer type changes.
Diffstat (limited to 'daemons/cmirrord/clogd.c')
-rw-r--r--daemons/cmirrord/clogd.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/daemons/cmirrord/clogd.c b/daemons/cmirrord/clogd.c
index 27e64ad1..b123179c 100644
--- a/daemons/cmirrord/clogd.c
+++ b/daemons/cmirrord/clogd.c
@@ -21,9 +21,10 @@
#include <sys/wait.h>
#include <unistd.h>
-static int exit_now = 0;
+static volatile sig_atomic_t exit_now = 0;
+/* FIXME Review signal handling. Should be volatile sig_atomic_t */
static sigset_t signal_mask;
-static int signal_received;
+static volatile sig_atomic_t signal_received;
static void process_signals(void);
static void daemonize(void);
@@ -96,7 +97,8 @@ static int create_lockfile(const char *lockfile)
sprintf(buffer, "%d\n", getpid());
- if(write(fd, buffer, strlen(buffer)) < strlen(buffer)){
+ /* FIXME Handle other non-error returns without aborting */
+ if (write(fd, buffer, strlen(buffer)) < strlen(buffer)){
close(fd);
unlink(lockfile);
return -errno;
@@ -107,8 +109,9 @@ static int create_lockfile(const char *lockfile)
static void sig_handler(int sig)
{
+ /* FIXME Races - don't touch signal_mask here. */
sigaddset(&signal_mask, sig);
- ++signal_received;
+ signal_received = 1;
}
static void process_signal(int sig){
@@ -225,6 +228,7 @@ static void daemonize(void)
if (create_lockfile(CMIRRORD_PIDFILE))
exit(EXIT_LOCKFILE);
+ /* FIXME Replace with sigaction. (deprecated) */
signal(SIGINT, &sig_handler);
signal(SIGQUIT, &sig_handler);
signal(SIGTERM, &sig_handler);