summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Tao <tao.peng@emc.com>2012-08-23 13:03:34 -0400
committerSteve Dickson <steved@redhat.com>2012-08-23 13:04:19 -0400
commit2e9210833f45821c66a849604ed8a9508b24a06f (patch)
tree4ae6753e818fdcbc52b7ad4b939e27bb08c407be
parent42a065968d0f690b5ffd5a7db6afe224206f7b0f (diff)
downloadnfs-utils-2e9210833f45821c66a849604ed8a9508b24a06f.zip
nfs-utils-2e9210833f45821c66a849604ed8a9508b24a06f.tar.gz
nfs-utils-2e9210833f45821c66a849604ed8a9508b24a06f.tar.xz
blkmapd: proper signal handling
Signed-off-by: Peng Tao <tao.peng@emc.com> Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--utils/blkmapd/device-discovery.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/utils/blkmapd/device-discovery.c b/utils/blkmapd/device-discovery.c
index 8eddf50..df4627e 100644
--- a/utils/blkmapd/device-discovery.c
+++ b/utils/blkmapd/device-discovery.c
@@ -36,6 +36,7 @@
#include <scsi/scsi.h>
#include <scsi/scsi_ioctl.h>
#include <scsi/sg.h>
+#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
@@ -61,6 +62,7 @@
struct bl_disk *visible_disk_list;
int bl_watch_fd, bl_pipe_fd, nfs_pipedir_wfd, rpc_pipedir_wfd;
+int pidfd = -1;
struct bl_disk_path *bl_get_path(const char *filepath,
struct bl_disk_path *paths)
@@ -431,10 +433,20 @@ static int bl_event_helper(void)
return ret;
}
+void sig_die(int signal)
+{
+ if (pidfd >= 0) {
+ close(pidfd);
+ unlink(PID_FILE);
+ }
+ BL_LOG_ERR("exit on signal(%d)\n", signal);
+ exit(1);
+}
+
/* Daemon */
int main(int argc, char **argv)
{
- int pidfd = -1, opt, dflag = 0, fg = 0, ret = 1;
+ int opt, dflag = 0, fg = 0, ret = 1;
struct stat statbuf;
char pidbuf[64];
@@ -479,6 +491,10 @@ int main(int argc, char **argv)
write(pidfd, pidbuf, strlen(pidbuf));
}
+ signal(SIGINT, sig_die);
+ signal(SIGTERM, sig_die);
+ signal(SIGHUP, SIG_IGN);
+
if (dflag) {
bl_discover_devices();
exit(0);