[SCM] Samba Shared Repository - branch v3-2-test updated - release-3-2-0pre2-2196-g4f4781c

Volker Lendecke vlendec at samba.org
Wed Apr 23 20:24:42 GMT 2008


The branch, v3-2-test has been updated
       via  4f4781c6d17fe2db34dd5945fec52a7685448aec (commit)
      from  f8c364da94fac96450116be980e38ddddd3f304a (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 4f4781c6d17fe2db34dd5945fec52a7685448aec
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Apr 23 17:13:50 2008 +0200

    Fix CLEAR_IF_FIRST handling of messages.tdb
    
    We now open messages.tdb even before we do the become_daemon. become_daemon()
    involves a fork and an immediate exit of the parent, thus the
    parent_is_longlived argument must be set to false in this case. The parent is
    not really long lived :-)

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

Summary of changes:
 source/lib/util.c               |    5 +++--
 source/nmbd/asyncdns.c          |    2 +-
 source/nmbd/nmbd.c              |    2 +-
 source/printing/printing.c      |    2 +-
 source/smbd/server.c            |    5 +++--
 source/winbindd/winbindd.c      |    2 +-
 source/winbindd/winbindd_cm.c   |    2 +-
 source/winbindd/winbindd_dual.c |    2 +-
 8 files changed, 12 insertions(+), 10 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/lib/util.c b/source/lib/util.c
index db0da54..953981e 100644
--- a/source/lib/util.c
+++ b/source/lib/util.c
@@ -990,7 +990,8 @@ void become_daemon(bool Fork, bool no_process_group)
 				  attach it to the logfile */
 }
 
-bool reinit_after_fork(struct messaging_context *msg_ctx)
+bool reinit_after_fork(struct messaging_context *msg_ctx,
+		       bool parent_longlived)
 {
 	NTSTATUS status;
 
@@ -1001,7 +1002,7 @@ bool reinit_after_fork(struct messaging_context *msg_ctx)
 	set_need_random_reseed();
 
 	/* tdb needs special fork handling */
-	if (tdb_reopen_all(1) == -1) {
+	if (tdb_reopen_all(parent_longlived ? 1 : 0) == -1) {
 		DEBUG(0,("tdb_reopen_all failed.\n"));
 		return false;
 	}
diff --git a/source/nmbd/asyncdns.c b/source/nmbd/asyncdns.c
index 0329491..ab9b1ed 100644
--- a/source/nmbd/asyncdns.c
+++ b/source/nmbd/asyncdns.c
@@ -164,7 +164,7 @@ void start_async_dns(void)
 	CatchSignal(SIGHUP, SIG_IGN);
         CatchSignal(SIGTERM, SIGNAL_CAST sig_term );
 
-	if (!reinit_after_fork(nmbd_messaging_context())) {
+	if (!reinit_after_fork(nmbd_messaging_context(), true)) {
 		DEBUG(0,("reinit_after_fork() failed\n"));
 		smb_panic("reinit_after_fork() failed");
 	}
diff --git a/source/nmbd/nmbd.c b/source/nmbd/nmbd.c
index 9396219..af4acc8 100644
--- a/source/nmbd/nmbd.c
+++ b/source/nmbd/nmbd.c
@@ -912,7 +912,7 @@ static bool open_sockets(bool isdaemon, int port)
 
 	pidfile_create("nmbd");
 
-	if (!reinit_after_fork(nmbd_messaging_context())) {
+	if (!reinit_after_fork(nmbd_messaging_context(), false)) {
 		DEBUG(0,("reinit_after_fork() failed\n"));
 		exit(1);
 	}
diff --git a/source/printing/printing.c b/source/printing/printing.c
index fdf5e6c..c5fe53f 100644
--- a/source/printing/printing.c
+++ b/source/printing/printing.c
@@ -1406,7 +1406,7 @@ void start_background_queue(void)
 		/* Child. */
 		DEBUG(5,("start_background_queue: background LPQ thread started\n"));
 
-		if (!reinit_after_fork(smbd_messaging_context())) {
+		if (!reinit_after_fork(smbd_messaging_context(), true)) {
 			DEBUG(0,("reinit_after_fork() failed\n"));
 			smb_panic("reinit_after_fork() failed");
 		}
diff --git a/source/smbd/server.c b/source/smbd/server.c
index 59bbfdb..cf02589 100644
--- a/source/smbd/server.c
+++ b/source/smbd/server.c
@@ -739,7 +739,8 @@ static bool open_sockets_smbd(bool is_daemon, bool interactive, const char *smb_
 								sizeof(remaddr)),
 								false);
 
-				if (!reinit_after_fork(smbd_messaging_context())) {
+				if (!reinit_after_fork(
+					    smbd_messaging_context(), true)) {
 					DEBUG(0,("reinit_after_fork() failed\n"));
 					smb_panic("reinit_after_fork() failed");
 				}
@@ -1285,7 +1286,7 @@ extern void build_options(bool screen);
 	if (is_daemon)
 		pidfile_create("smbd");
 
-	if (!reinit_after_fork(smbd_messaging_context())) {
+	if (!reinit_after_fork(smbd_messaging_context(), false)) {
 		DEBUG(0,("reinit_after_fork() failed\n"));
 		exit(1);
 	}
diff --git a/source/winbindd/winbindd.c b/source/winbindd/winbindd.c
index 64674b8..1072f8e 100644
--- a/source/winbindd/winbindd.c
+++ b/source/winbindd/winbindd.c
@@ -1189,7 +1189,7 @@ int main(int argc, char **argv, char **envp)
 
 	TimeInit();
 
-	if (!reinit_after_fork(winbind_messaging_context())) {
+	if (!reinit_after_fork(winbind_messaging_context(), false)) {
 		DEBUG(0,("reinit_after_fork() failed\n"));
 		exit(1);
 	}
diff --git a/source/winbindd/winbindd_cm.c b/source/winbindd/winbindd_cm.c
index c62476e..822f946 100644
--- a/source/winbindd/winbindd_cm.c
+++ b/source/winbindd/winbindd_cm.c
@@ -199,7 +199,7 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
 
 	/* Leave messages blocked - we will never process one. */
 
-	if (!reinit_after_fork(winbind_messaging_context())) {
+	if (!reinit_after_fork(winbind_messaging_context(), true)) {
 		DEBUG(0,("reinit_after_fork() failed\n"));
 		_exit(0);
 	}
diff --git a/source/winbindd/winbindd_dual.c b/source/winbindd/winbindd_dual.c
index 77fbe3c..14ba38c 100644
--- a/source/winbindd/winbindd_dual.c
+++ b/source/winbindd/winbindd_dual.c
@@ -1005,7 +1005,7 @@ static bool fork_domain_child(struct winbindd_child *child)
 	state.sock = fdpair[0];
 	close(fdpair[1]);
 
-	if (!reinit_after_fork(winbind_messaging_context())) {
+	if (!reinit_after_fork(winbind_messaging_context(), true)) {
 		DEBUG(0,("reinit_after_fork() failed\n"));
 		_exit(0);
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list