[master] a1a752407 Handle EWOULDBLOCK as a short write

Poul-Henning Kamp phk at FreeBSD.org
Mon Apr 29 09:28:08 UTC 2019


commit a1a7524076e8be742fc5e8272561f39eda9d492a
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 6a471b043..ae924d66e 100644
--- a/bin/varnishd/http1/cache_http1_line.c
+++ b/bin/varnishd/http1/cache_http1_line.c
@@ -201,7 +201,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.
@@ -223,7 +223,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