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

Jeremy Allison jra at samba.org
Thu Mar 27 21:23:51 GMT 2008


The branch, v3-2-test has been updated
       via  4b03f4eb2da7a523967ace3d13e79406ade07d47 (commit)
      from  085887eed71ed1ffdb30100d83763e671ea10eee (commit)

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


- Log -----------------------------------------------------------------
commit 4b03f4eb2da7a523967ace3d13e79406ade07d47
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Mar 27 14:23:20 2008 -0700

    Fix for termination problems when no interfaces found - bug #5267.
    Jeremy.

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

Summary of changes:
 source/nmbd/nmbd.c |   21 +++++++++++++++------
 1 files changed, 15 insertions(+), 6 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/nmbd/nmbd.c b/source/nmbd/nmbd.c
index 00d2529..9797a7a 100644
--- a/source/nmbd/nmbd.c
+++ b/source/nmbd/nmbd.c
@@ -182,11 +182,12 @@ static void reload_interfaces(time_t t)
 		return;
 	}
 
+  try_again:
+
 	/* the list of probed interfaces has changed, we may need to add/remove
 	   some subnets */
 	load_interfaces();
 
-  try_again:
 
 	/* find any interfaces that need adding */
 	for (n=iface_count() - 1; n >= 0; n--) {
@@ -278,7 +279,6 @@ static void reload_interfaces(time_t t)
 
 	/* We need to wait if there are no subnets... */
 	if (FIRST_SUBNET == NULL) {
-		void (*saved_handler)(int);
 
 		DEBUG(0,("reload_interfaces: "
 			"No subnets to listen to. Waiting..\n"));
@@ -288,19 +288,28 @@ static void reload_interfaces(time_t t)
 		 * cause us to exit.
 		 */
 
-		saved_handler = CatchSignal( SIGTERM, SIGNAL_CAST SIG_DFL );
+		BlockSignals(false, SIGTERM);
 
 		/* We only count IPv4 interfaces here. */
-		while (iface_count_v4() == 0) {
+		while (iface_count_v4() == 0 && !got_sig_term) {
 			sleep(5);
 			load_interfaces();
 		}
 
 		/*
-		 * We got an interface, restore our normal term handler.
+		 * Handle termination inband.
+		 */
+
+		if (got_sig_term) {
+			got_sig_term = 0;
+			terminate();
+		}
+
+		/*
+		 * We got an interface, go back to blocking term.
 		 */
 
-		CatchSignal( SIGTERM, SIGNAL_CAST saved_handler );
+		BlockSignals(true, SIGTERM);
 		goto try_again;
 	}
 }


-- 
Samba Shared Repository


More information about the samba-cvs mailing list