From d595ad4481ae9d1aaebede7f59a0e9af6321fe8f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 29 Apr 2010 12:50:34 -0700 Subject: [PATCH] msgr: remove pid file on SIGINT, SIGTERM --- src/msg/SimpleMessenger.cc | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/msg/SimpleMessenger.cc b/src/msg/SimpleMessenger.cc index 170b294d53fc3..c6998d9ad22af 100644 --- a/src/msg/SimpleMessenger.cc +++ b/src/msg/SimpleMessenger.cc @@ -2088,39 +2088,42 @@ int SimpleMessenger::bind(int64_t force_nonce) return accepter.bind(force_nonce); } -static void write_pid_file(int pid) +static void remove_pid_file(int signal = 0) { if (!g_conf.pid_file) return; - int fd = ::open(g_conf.pid_file, O_CREAT|O_TRUNC|O_WRONLY, 0644); + // only remove it if it has OUR pid in it! + int fd = ::open(g_conf.pid_file, O_RDONLY); if (fd >= 0) { char buf[20]; - int len = snprintf(buf, sizeof(buf), "%d\n", pid); - ::write(fd, buf, len); + ::read(fd, buf, 20); ::close(fd); + int a = atoi(buf); + + if (a == getpid()) + ::unlink(g_conf.pid_file); + else if (!signal) + generic_dout(0) << "strange, pid file " << g_conf.pid_file + << " has " << a << ", not expected " << getpid() + << dendl; } } -static void remove_pid_file() +static void write_pid_file(int pid) { if (!g_conf.pid_file) return; - // only remove it if it has OUR pid in it! - int fd = ::open(g_conf.pid_file, O_RDONLY); + int fd = ::open(g_conf.pid_file, O_CREAT|O_TRUNC|O_WRONLY, 0644); if (fd >= 0) { char buf[20]; - ::read(fd, buf, 20); + int len = snprintf(buf, sizeof(buf), "%d\n", pid); + ::write(fd, buf, len); ::close(fd); - int a = atoi(buf); - if (a == getpid()) - ::unlink(g_conf.pid_file); - else - generic_dout(0) << "strange, pid file " << g_conf.pid_file - << " has " << a << ", not expected " << getpid() - << dendl; + signal(SIGTERM, remove_pid_file); + signal(SIGINT, remove_pid_file); } } -- 2.39.5