diff options
author | Dan Williams <dan.j.williams@intel.com> | 2008-10-02 06:32:08 -0700 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2008-10-15 14:43:57 -0700 |
commit | 6144ed441445ee4d567614aaed78dd24148881ce (patch) | |
tree | 7c98537390691aca6739ea2ed9f4d151a9a9f027 /managemon.c | |
parent | 57ed8c9155d31ca78c48979f4f98d40e4c0deac3 (diff) | |
download | mdadm-6144ed441445ee4d567614aaed78dd24148881ce.tar.gz mdadm-6144ed441445ee4d567614aaed78dd24148881ce.tar.xz mdadm-6144ed441445ee4d567614aaed78dd24148881ce.zip |
mdmon: terminate clean
We generally don't want mdmon to be terminated, but if a SIGTERM gets
through try to leave the monitored arrays in a clean state, block
attempts to mark the array dirty, and stop servicing the socket.
When we are killed by sigterm don't remove the pidfile let that be
cleaned up by the next monitor.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'managemon.c')
-rw-r--r-- | managemon.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/managemon.c b/managemon.c index 730334c..a8af614 100644 --- a/managemon.c +++ b/managemon.c @@ -555,7 +555,7 @@ static void handle_message(struct supertype *container, struct metadata_update * manage(mdstat, container); free_mdstat(mdstat); - } else { + } else if (!sigterm) { mu = malloc(sizeof(*mu)); mu->len = msg->len; mu->buf = msg->buf; @@ -612,6 +612,7 @@ void do_manager(struct supertype *container) sigdelset(&set, SIGUSR1); sigdelset(&set, SIGHUP); sigdelset(&set, SIGALRM); + sigdelset(&set, SIGTERM); proc_fd = open("/proc/mounts", O_RDONLY); do { @@ -647,6 +648,9 @@ void do_manager(struct supertype *container) manager_ready = 1; + if (sigterm) + wakeup_monitor(); + if (update_queue == NULL) { if (container->sock < 0) mdstat_wait_fd(proc_fd, &set); |