The Samba-Bugzilla – Attachment 4304 Details for
Bug 4699
smbd does not remove /var/run/smbd.pid file even if signal TERM is given to it
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for master
0001-Fix-bug-4699-Remove-pidfile-on-clean-shutdown.patch (text/plain), 4.06 KB, created by
Volker Lendecke
on 2009-06-18 04:49:13 UTC
(
hide
)
Description:
Patch for master
Filename:
MIME Type:
Creator:
Volker Lendecke
Created:
2009-06-18 04:49:13 UTC
Size:
4.06 KB
patch
obsolete
>From c2d7a5e3d96e78c5a3d7232d6ce7730843e5e6d1 Mon Sep 17 00:00:00 2001 >From: Volker Lendecke <vl@samba.org> >Date: Thu, 18 Jun 2009 11:45:57 +0200 >Subject: [PATCH] Fix bug 4699: Remove pidfile on clean shutdown > >--- > source3/include/proto.h | 1 + > source3/lib/pidfile.c | 26 ++++++++++++++++++-------- > source3/nmbd/nmbd.c | 2 ++ > source3/smbd/server.c | 3 +++ > source3/winbindd/winbindd.c | 4 ++++ > 5 files changed, 28 insertions(+), 8 deletions(-) > >diff --git a/source3/include/proto.h b/source3/include/proto.h >index 4ae141e..99172a6 100644 >--- a/source3/include/proto.h >+++ b/source3/include/proto.h >@@ -583,6 +583,7 @@ int nt_status_to_pam(NTSTATUS nt_status); > > pid_t pidfile_pid(const char *name); > void pidfile_create(const char *program_name); >+void pidfile_unlink(void); > > /* The following definitions come from lib/popt_common.c */ > >diff --git a/source3/lib/pidfile.c b/source3/lib/pidfile.c >index 3495dae..37b36af 100644 >--- a/source3/lib/pidfile.c >+++ b/source3/lib/pidfile.c >@@ -25,6 +25,8 @@ > #define O_NONBLOCK > #endif > >+static char *pidFile_name = NULL; >+ > /* return the pid in a pidfile. return 0 if the process (or pidfile) > does not exist */ > pid_t pidfile_pid(const char *name) >@@ -88,7 +90,6 @@ void pidfile_create(const char *program_name) > char buf[20]; > const char *short_configfile; > char *name; >- char *pidFile; > pid_t pid; > > /* Add a suffix to the program name if this is a process with a >@@ -110,27 +111,28 @@ void pidfile_create(const char *program_name) > } > } > >- if (asprintf(&pidFile, "%s/%s.pid", lp_piddir(), name) == -1) { >+ if (asprintf(&pidFile_name, "%s/%s.pid", lp_piddir(), name) == -1) { > smb_panic("asprintf failed"); > } > > pid = pidfile_pid(name); > if (pid != 0) { > DEBUG(0,("ERROR: %s is already running. File %s exists and process id %d is running.\n", >- name, pidFile, (int)pid)); >+ name, pidFile_name, (int)pid)); > exit(1); > } > >- fd = sys_open(pidFile, O_NONBLOCK | O_CREAT | O_WRONLY | O_EXCL, 0644); >+ fd = sys_open(pidFile_name, O_NONBLOCK | O_CREAT | O_WRONLY | O_EXCL, >+ 0644); > if (fd == -1) { >- DEBUG(0,("ERROR: can't open %s: Error was %s\n", pidFile, >+ DEBUG(0,("ERROR: can't open %s: Error was %s\n", pidFile_name, > strerror(errno))); > exit(1); > } > > if (fcntl_lock(fd,SMB_F_SETLK,0,1,F_WRLCK)==False) { > DEBUG(0,("ERROR: %s : fcntl lock of file %s failed. Error was %s\n", >- name, pidFile, strerror(errno))); >+ name, pidFile_name, strerror(errno))); > exit(1); > } > >@@ -138,10 +140,18 @@ void pidfile_create(const char *program_name) > slprintf(buf, sizeof(buf) - 1, "%u\n", (unsigned int) sys_getpid()); > if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) { > DEBUG(0,("ERROR: can't write to file %s: %s\n", >- pidFile, strerror(errno))); >+ pidFile_name, strerror(errno))); > exit(1); > } > /* Leave pid file open & locked for the duration... */ > SAFE_FREE(name); >- SAFE_FREE(pidFile); >+} >+ >+void pidfile_unlink(void) >+{ >+ if (pidFile_name == NULL) { >+ return; >+ } >+ unlink(pidFile_name); >+ SAFE_FREE(pidFile_name); > } >diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c >index 903dc36..848baef 100644 >--- a/source3/nmbd/nmbd.c >+++ b/source3/nmbd/nmbd.c >@@ -82,6 +82,8 @@ static void terminate(void) > /* If there was an async dns child - kill it. */ > kill_async_dns_child(); > >+ pidfile_unlink(); >+ > exit(0); > } > >diff --git a/source3/smbd/server.c b/source3/smbd/server.c >index d3ce4b6..5b474d8 100644 >--- a/source3/smbd/server.c >+++ b/source3/smbd/server.c >@@ -854,6 +854,9 @@ static void exit_server_common(enum server_exit_reason how, > } else { > DEBUG(3,("Server exit (%s)\n", > (reason ? reason : "normal exit"))); >+ if (am_parent) { >+ pidfile_unlink(); >+ } > } > > /* if we had any open SMB connections when we exited then we >diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c >index 0a73c0e..d617fe1 100644 >--- a/source3/winbindd/winbindd.c >+++ b/source3/winbindd/winbindd.c >@@ -173,6 +173,10 @@ static void terminate(bool is_parent) > } > #endif > >+ if (is_parent) { >+ pidfile_unlink(); >+ } >+ > exit(0); > } > >-- >1.5.5 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 4699
: 4304