[master] e4c002c Make VDI_RecycleFd() take a pointer to the vbc to recycle.

Poul-Henning Kamp phk at varnish-cache.org
Mon Dec 5 14:43:51 CET 2011


commit e4c002c41096468083fddef3a47e6b5c49577744
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Dec 5 13:28:20 2011 +0000

    Make VDI_RecycleFd() take a pointer to the vbc to recycle.

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 05aaf39..4cc356e 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -651,7 +651,7 @@ void VBE_UseHealth(const struct director *vdi);
 struct vbc *VDI_GetFd(const struct director *, struct sess *sp);
 int VDI_Healthy(const struct director *, const struct sess *sp);
 void VDI_CloseFd(struct worker *wrk, struct vbc **vbp);
-void VDI_RecycleFd(struct worker *wrk);
+void VDI_RecycleFd(struct worker *wrk, struct vbc **vbp);
 void VDI_AddHostHeader(const struct sess *sp);
 void VBE_Poll(void);
 
diff --git a/bin/varnishd/cache/cache_dir.c b/bin/varnishd/cache/cache_dir.c
index 434277e..5902ce8 100644
--- a/bin/varnishd/cache/cache_dir.c
+++ b/bin/varnishd/cache/cache_dir.c
@@ -70,17 +70,22 @@ VDI_CloseFd(struct worker *wrk, struct vbc **vbp)
 /* Recycle a connection ----------------------------------------------*/
 
 void
-VDI_RecycleFd(struct worker *wrk)
+VDI_RecycleFd(struct worker *wrk, struct vbc **vbp)
 {
 	struct backend *bp;
+	struct vbc *vc;
 
-	CHECK_OBJ_NOTNULL(wrk->vbc, VBC_MAGIC);
-	CHECK_OBJ_NOTNULL(wrk->vbc->backend, BACKEND_MAGIC);
-	assert(wrk->vbc->fd >= 0);
+	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
+	AN(vbp);
+	vc = *vbp;
+	*vbp = NULL;
+	CHECK_OBJ_NOTNULL(vc, VBC_MAGIC);
+	CHECK_OBJ_NOTNULL(vc->backend, BACKEND_MAGIC);
+	assert(vc->fd >= 0);
 
-	bp = wrk->vbc->backend;
+	bp = vc->backend;
 
-	WSL(wrk, SLT_BackendReuse, wrk->vbc->vsl_id, "%s", bp->display_name);
+	WSL(wrk, SLT_BackendReuse, vc->vsl_id, "%s", bp->display_name);
 	/*
 	 * Flush the shmlog, so that another session reusing this backend
 	 * will log chronologically later than our use of it.
@@ -88,8 +93,7 @@ VDI_RecycleFd(struct worker *wrk)
 	WSL_Flush(wrk, 0);
 	Lck_Lock(&bp->mtx);
 	VSC_C_main->backend_recycle++;
-	VTAILQ_INSERT_HEAD(&bp->connlist, wrk->vbc, list);
-	wrk->vbc = NULL;
+	VTAILQ_INSERT_HEAD(&bp->connlist, vc, list);
 	VBE_DropRefLocked(bp);
 }
 
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index 7d8763f..d321d7a 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -617,7 +617,7 @@ FetchBody(struct worker *w, struct object *obj)
 	if (cls)
 		VDI_CloseFd(w, &w->vbc);
 	else
-		VDI_RecycleFd(w);
+		VDI_RecycleFd(w, &w->vbc);
 
 	return (0);
 }



More information about the varnish-commit mailing list