r1710 - trunk/varnish-cache/bin/varnishd

des at projects.linpro.no des at projects.linpro.no
Tue Jul 17 12:33:46 CEST 2007


Author: des
Date: 2007-07-17 12:33:46 +0200 (Tue, 17 Jul 2007)
New Revision: 1710

Modified:
   trunk/varnish-cache/bin/varnishd/mgt_child.c
Log:
Fix child restart by always calling close_sockets() when the child dies;
otherwise open_sockets() fails, which causes start_child() to fail silently.

Furthermore, if open_sockets() fails and child_state is CH_DIED, it will
not be possible to start it manually later; therefore, set child_state
to CH_STOPPED when open_sockets() fails.

Note: it wouldn't hurt if open_sockets() were a little more talkative.


Modified: trunk/varnish-cache/bin/varnishd/mgt_child.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/mgt_child.c	2007-07-17 10:15:44 UTC (rev 1709)
+++ trunk/varnish-cache/bin/varnishd/mgt_child.c	2007-07-17 10:33:46 UTC (rev 1710)
@@ -174,8 +174,10 @@
 	if (child_state != CH_STOPPED && child_state != CH_DIED)
 		return;
 
-	if (open_sockets())
+	if (open_sockets()) {
+		child_state = CH_STOPPED;
 		return;	/* XXX ?? */
+	}
 
 	child_state = CH_STARTING;
 
@@ -336,12 +338,11 @@
 	child_fds[0] = -1;
 	fprintf(stderr, "Child cleaned\n");
 
+	close_sockets();
 	if (child_state == CH_DIED && params->auto_restart)
 		start_child();
-	else if (child_state == CH_DIED) {
-		close_sockets();
+	else if (child_state == CH_DIED)
 		child_state = CH_STOPPED;
-	}
 	else if (child_state == CH_STOPPING)
 		child_state = CH_STOPPED;
 	return (0);




More information about the varnish-commit mailing list