r910 - trunk/varnish-cache/bin/varnishd

phk at projects.linpro.no phk at projects.linpro.no
Thu Aug 24 08:15:13 CEST 2006


Author: phk
Date: 2006-08-24 08:15:13 +0200 (Thu, 24 Aug 2006)
New Revision: 910

Modified:
   trunk/varnish-cache/bin/varnishd/cache_acceptor.c
Log:
This is a workaround for what is probably a race in FreeBSD RELENG_6
socket dismantling.

There is no way that close(2) should ever be able to return EINVAL,
but we've seen it.

Specifically assert on EBADF which is the check we're really after.



Modified: trunk/varnish-cache/bin/varnishd/cache_acceptor.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_acceptor.c	2006-08-23 14:30:06 UTC (rev 909)
+++ trunk/varnish-cache/bin/varnishd/cache_acceptor.c	2006-08-24 06:15:13 UTC (rev 910)
@@ -141,10 +141,13 @@
 void
 vca_close_session(struct sess *sp, const char *why)
 {
+	int i;
 
 	VSL(SLT_SessionClose, sp->fd, why);
-	if (sp->fd >= 0)
-		AZ(close(sp->fd));
+	if (sp->fd >= 0) {
+		i = close(sp->fd);
+		assert(i == 0 || errno != EBADF);	/* XXX EINVAL seen */
+	}
 	sp->fd = -1;
 }
 




More information about the varnish-commit mailing list