summaryrefslogtreecommitdiff
path: root/lib/util
diff options
context:
space:
mode:
Diffstat (limited to 'lib/util')
-rw-r--r--lib/util/pidfile.c24
-rw-r--r--lib/util/pidfile.h1
2 files changed, 25 insertions, 0 deletions
diff --git a/lib/util/pidfile.c b/lib/util/pidfile.c
index ac8ff8a0c3..88463711f9 100644
--- a/lib/util/pidfile.c
+++ b/lib/util/pidfile.c
@@ -58,24 +58,32 @@ pid_t pidfile_pid(const char *piddir, const char *name)
ret = (pid_t)atoi(pidstr);
if (ret <= 0) {
+ DEBUG(1, ("Could not parse contents of pidfile %s\n",
+ pidFile));
goto noproc;
}
if (!process_exists_by_pid(ret)) {
+ DEBUG(10, ("Process with PID=%d does not exist.\n", (int)ret));
goto noproc;
}
if (fcntl_lock(fd,F_SETLK,0,1,F_RDLCK)) {
/* we could get the lock - it can't be a Samba process */
+ DEBUG(10, ("Process with PID=%d is not a Samba process.\n",
+ (int)ret));
goto noproc;
}
close(fd);
SAFE_FREE(pidFile);
+ DEBUG(10, ("Process with PID=%d is running.\n", (int)ret));
return ret;
noproc:
close(fd);
+ DEBUG(10, ("Deleting %s, since %d is not a Samba process.\n", pidFile,
+ (int)ret));
unlink(pidFile);
SAFE_FREE(pidFile);
return 0;
@@ -129,3 +137,19 @@ void pidfile_create(const char *piddir, const char *name)
/* Leave pid file open & locked for the duration... */
SAFE_FREE(pidFile);
}
+
+void pidfile_unlink(const char *piddir, const char *name)
+{
+ int ret;
+ char *pidFile = NULL;
+
+ if (asprintf(&pidFile, "%s/%s.pid", piddir, name) < 0) {
+ DEBUG(0,("ERROR: Out of memory\n"));
+ exit(1);
+ }
+ ret = unlink(pidFile);
+ if (ret == -1) {
+ DEBUG(0,("Failed to delete pidfile %s. Error was %s\n",
+ pidFile, strerror(errno)));
+ }
+}
diff --git a/lib/util/pidfile.h b/lib/util/pidfile.h
index 92a277d820..d504f526a5 100644
--- a/lib/util/pidfile.h
+++ b/lib/util/pidfile.h
@@ -22,5 +22,6 @@
pid_t pidfile_pid(const char *piddir, const char *name);
void pidfile_create(const char *piddir, const char *program_name);
+void pidfile_unlink(const char *piddir, const char *program_name);
#endif