[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha6-1111-g8d63c59

Steven Danneman sdanneman at samba.org
Tue Feb 24 05:16:55 GMT 2009


The branch, master has been updated
       via  8d63c596a0f512c96f5663c0a9bd49d3c98c6df9 (commit)
      from  3a1b4c00eb96634229fb730e9b38e8df5180756a (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 8d63c596a0f512c96f5663c0a9bd49d3c98c6df9
Author: Steven Danneman <steven.danneman at isilon.com>
Date:   Mon Feb 23 20:46:11 2009 -0800

    Refactored sys_fork() and sys_pid() into shared util library
    
    This fixes a bug in 116ce19b, where we didn't clear the pid cache in
    become_daemon() and thus the /var/run/smbd.pid didn't match the actual
    pid of the parent process.
    
    Currently S4 will clear the pid cache on fork but doesn't yet take
    advantage of the pid cache by using sys_pid() instead of the direct
    get_pid().

-----------------------------------------------------------------------

Summary of changes:
 lib/util/become_daemon.c |    6 +++---
 lib/util/system.c        |   29 +++++++++++++++++++++++++++++
 lib/util/util.h          |   10 ++++++++++
 source3/Makefile.in      |    2 +-
 source3/include/proto.h  |    2 --
 source3/lib/system.c     |   29 -----------------------------
 6 files changed, 43 insertions(+), 35 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/become_daemon.c b/lib/util/become_daemon.c
index 5a97b65..3d06a43 100644
--- a/lib/util/become_daemon.c
+++ b/lib/util/become_daemon.c
@@ -66,10 +66,10 @@ _PUBLIC_ void close_low_fds(bool stderr_too)
  Become a daemon, discarding the controlling terminal.
 ****************************************************************************/
 
-_PUBLIC_ void become_daemon(bool Fork, bool no_process_group)
+_PUBLIC_ void become_daemon(bool do_fork, bool no_process_group)
 {
-	if (Fork) {
-		if (fork()) {
+	if (do_fork) {
+		if (sys_fork()) {
 			_exit(0);
 		}
 	}
diff --git a/lib/util/system.c b/lib/util/system.c
index 9bd1800..9bf5de1 100644
--- a/lib/util/system.c
+++ b/lib/util/system.c
@@ -88,3 +88,32 @@ _PUBLIC_ struct in_addr sys_inet_makeaddr(int net, int host)
 	return in2;
 }
 
+/**************************************************************************
+ Wrapper for fork. Ensures we clear our pid cache.
+****************************************************************************/
+
+static pid_t mypid = (pid_t)-1;
+
+_PUBLIC_ pid_t sys_fork(void)
+{
+	pid_t forkret = fork();
+
+	if (forkret == (pid_t)0) {
+		/* Child - reset mypid so sys_getpid does a system call. */
+		mypid = (pid_t) -1;
+	}
+
+	return forkret;
+}
+
+/**************************************************************************
+ Wrapper for getpid. Ensures we only do a system call *once*.
+****************************************************************************/
+
+_PUBLIC_ pid_t sys_getpid(void)
+{
+	if (mypid == (pid_t)-1)
+		mypid = getpid();
+
+	return mypid;
+}
diff --git a/lib/util/util.h b/lib/util/util.h
index d3e446f..27f94cd 100644
--- a/lib/util/util.h
+++ b/lib/util/util.h
@@ -134,6 +134,16 @@ apparent reason.
 _PUBLIC_ struct hostent *sys_gethostbyname(const char *name);
 _PUBLIC_ struct in_addr sys_inet_makeaddr(int net, int host);
 
+/**
+ * Wrapper for fork used to invalid pid cache.
+ **/
+_PUBLIC_ pid_t sys_fork(void);
+
+/**
+ * Wrapper for getpid. Ensures we only do a system call *once*.
+ **/
+_PUBLIC_ pid_t sys_getpid(void);
+
 /* The following definitions come from lib/util/genrand.c  */
 
 /**
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 7564659..a403f14 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -339,7 +339,7 @@ UTIL_OBJ = ../lib/util/rbtree.o ../lib/util/signal.o ../lib/util/time.o \
 		   ../lib/util/util.o ../lib/util/fsusage.o \
 		   ../lib/util/params.o ../lib/util/talloc_stack.o \
 		   ../lib/util/genrand.o ../lib/util/util_net.o \
-		   ../lib/util/become_daemon.o
+		   ../lib/util/become_daemon.o ../lib/util/system.o
 
 CRYPTO_OBJ = ../lib/crypto/crc32.o ../lib/crypto/md5.o \
 			 ../lib/crypto/hmacmd5.o ../lib/crypto/arcfour.o \
diff --git a/source3/include/proto.h b/source3/include/proto.h
index faf47d3..14241d5 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -972,8 +972,6 @@ struct passwd *sys_getpwnam(const char *name);
 struct passwd *sys_getpwuid(uid_t uid);
 struct group *sys_getgrnam(const char *name);
 struct group *sys_getgrgid(gid_t gid);
-pid_t sys_fork(void);
-pid_t sys_getpid(void);
 int sys_popen(const char *command);
 int sys_pclose(int fd);
 ssize_t sys_getxattr (const char *path, const char *name, void *value, size_t size);
diff --git a/source3/lib/system.c b/source3/lib/system.c
index 8bdc9fa..10b55f6 100644
--- a/source3/lib/system.c
+++ b/source3/lib/system.c
@@ -1043,35 +1043,6 @@ static char **extract_args(TALLOC_CTX *mem_ctx, const char *command)
 }
 
 /**************************************************************************
- Wrapper for fork. Ensures that mypid is reset. Used so we can write
- a sys_getpid() that only does a system call *once*.
-****************************************************************************/
-
-static pid_t mypid = (pid_t)-1;
-
-pid_t sys_fork(void)
-{
-	pid_t forkret = fork();
-
-	if (forkret == (pid_t)0) /* Child - reset mypid so sys_getpid does a system call. */
-		mypid = (pid_t) -1;
-
-	return forkret;
-}
-
-/**************************************************************************
- Wrapper for getpid. Ensures we only do a system call *once*.
-****************************************************************************/
-
-pid_t sys_getpid(void)
-{
-	if (mypid == (pid_t)-1)
-		mypid = getpid();
-
-	return mypid;
-}
-
-/**************************************************************************
  Wrapper for popen. Safer as it doesn't search a path.
  Modified from the glibc sources.
  modified by tridge to return a file descriptor. We must kick our FILE* habit


-- 
Samba Shared Repository


More information about the samba-cvs mailing list