[6.0] b6a94a282 Handle EWOULDBLOCK as a short write

Reza Naghibi reza at naghibi.com
Tue Jun 16 16:00:09 UTC 2020


commit b6a94a2820747f02fb798ae15e6bd96ecb3857be
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Apr 29 09:26:27 2019 +0000

    Handle EWOULDBLOCK as a short write

diff --git a/bin/varnishd/http1/cache_http1_line.c b/bin/varnishd/http1/cache_http1_line.c
index 7897cca4c..e7be7c8c2 100644
--- a/bin/varnishd/http1/cache_http1_line.c
+++ b/bin/varnishd/http1/cache_http1_line.c
@@ -204,7 +204,7 @@ V1L_Flush(const struct worker *wrk)
 		i = writev(*v1l->wfd, v1l->iov, v1l->niov);
 		if (i > 0)
 			v1l->cnt += i;
-		while (i != v1l->liov && i > 0) {
+		while (i != v1l->liov && (i > 0 || errno == EWOULDBLOCK)) {
 			/* Remove sent data from start of I/O vector,
 			 * then retry; we hit a timeout, but some data
 			 * was sent.
@@ -226,7 +226,8 @@ V1L_Flush(const struct worker *wrk)
 			    "Hit idle send timeout, wrote = %zd/%zd; retrying",
 			    i, v1l->liov);
 
-			v1l_prune(v1l, i);
+			if (i > 0)
+				v1l_prune(v1l, i);
 			i = writev(*v1l->wfd, v1l->iov, v1l->niov);
 			if (i > 0)
 				v1l->cnt += i;


More information about the varnish-commit mailing list