[4.1] 68a35e1 Make VBT_Close capable of dealing with STOLEN vtps

Dag Haavi Finstad daghf at varnish-software.com
Mon Nov 27 16:36:10 UTC 2017


commit 68a35e100ad711415fac16f0db3d9cb4a7e94867
Author: Dag Haavi Finstad <daghf at varnish-software.com>
Date:   Thu Nov 23 13:47:44 2017 +0100

    Make VBT_Close capable of dealing with STOLEN vtps
    
    The change from shutdown(.., SHUT_WR) to shutdown(.., SHUT_RDWR) is
    required to make it trigger a waiter event.

diff --git a/bin/varnishd/cache/cache_backend_tcp.c b/bin/varnishd/cache/cache_backend_tcp.c
index 882d087..e80b3c7 100644
--- a/bin/varnishd/cache/cache_backend_tcp.c
+++ b/bin/varnishd/cache/cache_backend_tcp.c
@@ -329,13 +329,14 @@ VBT_Close(struct tcp_pool *tp, struct vbc **vbcp)
 	*vbcp = NULL;
 	CHECK_OBJ_NOTNULL(vbc, VBC_MAGIC);
 
-	assert(vbc->state == VBC_STATE_USED);
 	assert(vbc->fd > 0);
 
 	Lck_Lock(&tp->mtx);
+	assert(vbc->state == VBC_STATE_USED || vbc->state == VBC_STATE_STOLEN);
 	tp->n_used--;
 	if (vbc->state == VBC_STATE_STOLEN) {
-		(void)shutdown(vbc->fd, SHUT_WR);
+		(void)shutdown(vbc->fd, SHUT_RDWR);
+		VTAILQ_REMOVE(&tp->connlist, vbc, list);
 		vbc->state = VBC_STATE_CLEANUP;
 		VTAILQ_INSERT_HEAD(&tp->killlist, vbc, list);
 		tp->n_kill++;


More information about the varnish-commit mailing list