diff options
author | Alasdair Kergon <agk@redhat.com> | 2010-01-19 15:58:45 +0000 |
---|---|---|
committer | Alasdair Kergon <agk@redhat.com> | 2010-01-19 15:58:45 +0000 |
commit | fc0c0cb075fde50083421c9ad0fb936b2b77b63b (patch) | |
tree | 3d8beb25b90d7bbe69a8b84f8a79236cbeeebb53 /daemons/cmirrord/clogd.c | |
parent | 7a965168193968fd1a34c766f0b435e4f08ef4ac (diff) | |
download | lvm2-fc0c0cb075fde50083421c9ad0fb936b2b77b63b.tar.gz |
Signal handling FIXMEs.
A few integer type changes.
Diffstat (limited to 'daemons/cmirrord/clogd.c')
-rw-r--r-- | daemons/cmirrord/clogd.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/daemons/cmirrord/clogd.c b/daemons/cmirrord/clogd.c index 27e64ad16..b123179cb 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); |