cluster: STABLE32 - cpglockd: fix pid file creation and check if daemon is already running
Ryan McCabe
rmccabe at fedoraproject.org
Tue May 1 13:43:38 UTC 2012
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=dfc510ae98605633e86d27eec584c7768af70065
Commit: dfc510ae98605633e86d27eec584c7768af70065
Parent: 3e92e3dbf9a423b4f9ddb50094969bea0b1d178a
Author: Fabio M. Di Nitto <fdinitto at redhat.com>
AuthorDate: Tue Apr 24 12:03:37 2012 +0200
Committer: Fabio M. Di Nitto <fdinitto at redhat.com>
CommitterDate: Tue Apr 24 17:04:09 2012 +0200
cpglockd: fix pid file creation and check if daemon is already running
Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
---
rgmanager/include/daemon_init.h | 1 +
rgmanager/src/clulib/daemon_init.c | 3 +--
rgmanager/src/daemons/cpglockd.c | 11 ++++++++++-
3 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/rgmanager/include/daemon_init.h b/rgmanager/include/daemon_init.h
index 0252386..99e87c2 100644
--- a/rgmanager/include/daemon_init.h
+++ b/rgmanager/include/daemon_init.h
@@ -3,6 +3,7 @@
int check_pid_valid(pid_t pid, char *prog);
int check_process_running(char *prog, pid_t * pid);
+void update_pidfile(char *prog);
void daemon_init(char *prog);
void daemon_cleanup(void);
diff --git a/rgmanager/src/clulib/daemon_init.c b/rgmanager/src/clulib/daemon_init.c
index 7703d34..7d68ffd 100644
--- a/rgmanager/src/clulib/daemon_init.c
+++ b/rgmanager/src/clulib/daemon_init.c
@@ -30,7 +30,6 @@
/*
* Local prototypes.
*/
-static void update_pidfile(char *prog);
static int setup_sigmask(void);
static char pid_filename[PATH_MAX];
@@ -138,7 +137,7 @@ check_process_running(char *prog, pid_t * pid)
}
-static void
+void
update_pidfile(char *prog)
{
FILE *fp = NULL;
diff --git a/rgmanager/src/daemons/cpglockd.c b/rgmanager/src/daemons/cpglockd.c
index 0cba6f3..5b6ea79 100644
--- a/rgmanager/src/daemons/cpglockd.c
+++ b/rgmanager/src/daemons/cpglockd.c
@@ -1363,8 +1363,17 @@ main(int argc, char **argv)
}
}
- if (!nofork)
+ if (!nofork) {
daemon_init((char *) "cpglockd");
+ } else {
+ pid_t pid;
+ if (check_process_running((char *) "cpglockd", &pid) && (pid != getpid())) {
+ fprintf(stderr,
+ "cpglockd is already running\n");
+ return -1;
+ }
+ update_pidfile((char *) "cpglockd");
+ }
setup_signal(SIGPIPE, SIG_IGN);
setup_signal(SIGTERM, flag_shutdown);
More information about the cluster-commits
mailing list