r5036 - in branches/2.1: . varnish-cache/bin/varnishd varnish-cache/bin/varnishtest varnish-cache/bin/varnishtest/tests varnish-cache/include varnish-cache/lib/libvarnish varnish-cache/lib/libvcl

tfheen at varnish-cache.org tfheen at varnish-cache.org
Tue Jul 13 10:16:48 CEST 2010


Author: tfheen
Date: 2010-07-13 10:16:48 +0200 (Tue, 13 Jul 2010)
New Revision: 5036

Modified:
   branches/2.1/
   branches/2.1/varnish-cache/bin/varnishd/cache_backend.h
   branches/2.1/varnish-cache/bin/varnishd/cache_backend_cfg.c
   branches/2.1/varnish-cache/bin/varnishd/cache_vrt.c
   branches/2.1/varnish-cache/bin/varnishd/vparam.h
   branches/2.1/varnish-cache/bin/varnishtest/tests/c00019.vtc
   branches/2.1/varnish-cache/bin/varnishtest/tests/r00325.vtc
   branches/2.1/varnish-cache/bin/varnishtest/tests/r00416.vtc
   branches/2.1/varnish-cache/bin/varnishtest/tests/v00011.vtc
   branches/2.1/varnish-cache/bin/varnishtest/vtc_server.c
   branches/2.1/varnish-cache/include/libvarnish.h
   branches/2.1/varnish-cache/include/vct.h
   branches/2.1/varnish-cache/include/vev.h
   branches/2.1/varnish-cache/lib/libvarnish/tcp.c
   branches/2.1/varnish-cache/lib/libvarnish/vev.c
   branches/2.1/varnish-cache/lib/libvcl/vcc_dir_random.c
Log:
Merge r4868: Handle RST leading to EINVAL on Solaris

Attempt an even more comprehensive fix for a bug in Solaris:
If the remote end RST's a TCP connection, all socket related syscalls
seems to return EINVAL.




Property changes on: branches/2.1
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk:4637,4640,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk:4637,4640,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989


Property changes on: branches/2.1/varnish-cache/bin/varnishd/cache_backend.h
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/bin/varnishd/cache_backend.h:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/bin/varnishd/cache_backend.h:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989


Property changes on: branches/2.1/varnish-cache/bin/varnishd/cache_backend_cfg.c
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/bin/varnishd/cache_backend_cfg.c:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/bin/varnishd/cache_backend_cfg.c:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989

Modified: branches/2.1/varnish-cache/bin/varnishd/cache_vrt.c
===================================================================
--- branches/2.1/varnish-cache/bin/varnishd/cache_vrt.c	2010-07-08 08:03:28 UTC (rev 5035)
+++ branches/2.1/varnish-cache/bin/varnishd/cache_vrt.c	2010-07-13 08:16:48 UTC (rev 5036)
@@ -696,10 +696,12 @@
 struct sockaddr *
 VRT_r_server_ip(struct sess *sp)
 {
+	int i;
 
-	if (sp->mysockaddr->sa_family == AF_UNSPEC)
-		assert(!getsockname(sp->fd, sp->mysockaddr, &sp->mysockaddrlen)
-		    || errno == ECONNRESET);
+	if (sp->mysockaddr->sa_family == AF_UNSPEC) {
+		i = getsockname(sp->fd, sp->mysockaddr, &sp->mysockaddrlen);
+		assert(TCP_Check(i));
+	}
 
 	return (sp->mysockaddr);
 }


Property changes on: branches/2.1/varnish-cache/bin/varnishd/vparam.h
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/bin/varnishd/vparam.h:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/bin/varnishd/vparam.h:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989


Property changes on: branches/2.1/varnish-cache/bin/varnishtest/tests/c00019.vtc
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/bin/varnishtest/tests/c00019.vtc:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/bin/varnishtest/tests/c00019.vtc:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989


Property changes on: branches/2.1/varnish-cache/bin/varnishtest/tests/r00325.vtc
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/bin/varnishtest/tests/r00325.vtc:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/bin/varnishtest/tests/r00325.vtc:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989


Property changes on: branches/2.1/varnish-cache/bin/varnishtest/tests/r00416.vtc
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/bin/varnishtest/tests/r00416.vtc:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/bin/varnishtest/tests/r00416.vtc:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989


Property changes on: branches/2.1/varnish-cache/bin/varnishtest/tests/v00011.vtc
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/bin/varnishtest/tests/v00011.vtc:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/bin/varnishtest/tests/v00011.vtc:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989

Modified: branches/2.1/varnish-cache/bin/varnishtest/vtc_server.c
===================================================================
--- branches/2.1/varnish-cache/bin/varnishtest/vtc_server.c	2010-07-08 08:03:28 UTC (rev 5035)
+++ branches/2.1/varnish-cache/bin/varnishtest/vtc_server.c	2010-07-13 08:16:48 UTC (rev 5036)
@@ -84,7 +84,7 @@
 {
 	struct server *s;
 	struct vtclog *vl;
-	int i, fd;
+	int i, j, fd;
 	struct sockaddr_storage addr_s;
 	struct sockaddr *addr;
 	socklen_t l;
@@ -105,8 +105,9 @@
 			vtc_log(vl, 0, "Accepted failed: %s", strerror(errno));
 		http_process(vl, s->spec, fd, s->sock);
 		vtc_log(vl, 3, "shutting fd %d", fd);
-		assert((shutdown(fd, SHUT_WR) == 0)
-		    || errno == ENOTCONN || errno == ECONNRESET);
+		j = shutdown(fd, SHUT_WR);
+		if (!TCP_Check(j))
+			vtc_log(vl, 0, "Shutdown failed: %s", strerror(errno));
 		TCP_close(&fd);
 	}
 	macro_def(s->vl, s->name, "addr", NULL);

Modified: branches/2.1/varnish-cache/include/libvarnish.h
===================================================================
--- branches/2.1/varnish-cache/include/libvarnish.h	2010-07-08 08:03:28 UTC (rev 5035)
+++ branches/2.1/varnish-cache/include/libvarnish.h	2010-07-13 08:16:48 UTC (rev 5036)
@@ -60,7 +60,16 @@
 #define TCP_ADDRBUFSIZE		64
 #define TCP_PORTBUFSIZE		16
 
+#if defined (__SVR4) && defined (__sun)
+/*
+ * Solaris returns EINVAL if the other end unexepectedly reset the
+ * connection.  This is a bug in Solaris.
+ */
+#define TCP_Check(a) ((a) == 0 || errno == ECONNRESET || errno == ENOTCONN \
+    || errno == EINVAL)
+#else
 #define TCP_Check(a) ((a) == 0 || errno == ECONNRESET || errno == ENOTCONN)
+#endif
 
 #define TCP_Assert(a) assert(TCP_Check(a))
 


Property changes on: branches/2.1/varnish-cache/include/vct.h
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/include/vct.h:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/include/vct.h:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989


Property changes on: branches/2.1/varnish-cache/include/vev.h
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/include/vev.h:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/include/vev.h:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989

Modified: branches/2.1/varnish-cache/lib/libvarnish/tcp.c
===================================================================
--- branches/2.1/varnish-cache/lib/libvarnish/tcp.c	2010-07-08 08:03:28 UTC (rev 5035)
+++ branches/2.1/varnish-cache/lib/libvarnish/tcp.c	2010-07-13 08:16:48 UTC (rev 5036)
@@ -236,9 +236,11 @@
 void
 TCP_close(int *s)
 {
-	assert (close(*s) == 0 ||
-	    errno == ECONNRESET ||
-	    errno == ENOTCONN);
+	int i;
+
+	i = close(*s);
+
+	assert (TCP_Check(i));
 	*s = -1;
 }
 


Property changes on: branches/2.1/varnish-cache/lib/libvarnish/tcp.c
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/lib/libvarnish/tcp.c:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/lib/libvarnish/tcp.c:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989


Property changes on: branches/2.1/varnish-cache/lib/libvarnish/vev.c
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/lib/libvarnish/vev.c:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/lib/libvarnish/vev.c:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989


Property changes on: branches/2.1/varnish-cache/lib/libvcl/vcc_dir_random.c
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/varnish-cache/lib/libvcl/vcc_dir_random.c:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4867,4973-4975,4977,4980-4981,4989
   + /trunk/varnish-cache/lib/libvcl/vcc_dir_random.c:4637,4643-4645,4647-4650,4654-4670,4686,4689-4690,4700,4712,4715-4719,4731,4750,4757-4758,4762,4818,4829,4865-4868,4973-4975,4977,4980-4981,4989




More information about the varnish-commit mailing list