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