r5541 - trunk/varnish-cache/bin/varnishd

phk at varnish-cache.org phk at varnish-cache.org
Mon Nov 15 12:11:53 CET 2010


Author: phk
Date: 2010-11-15 12:11:52 +0100 (Mon, 15 Nov 2010)
New Revision: 5541

Modified:
   trunk/varnish-cache/bin/varnishd/cache_center.c
   trunk/varnish-cache/bin/varnishd/cache_expire.c
   trunk/varnish-cache/bin/varnishd/cache_hash.c
   trunk/varnish-cache/bin/varnishd/hash_slinger.h
Log:
Reduce the arguments of HSH_DerefObjCore() to the minimum needed.



Modified: trunk/varnish-cache/bin/varnishd/cache_center.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_center.c	2010-11-15 10:39:18 UTC (rev 5540)
+++ trunk/varnish-cache/bin/varnishd/cache_center.c	2010-11-15 11:11:52 UTC (rev 5541)
@@ -471,9 +471,9 @@
 		if (sp->objcore != NULL) {
 			CHECK_OBJ_NOTNULL(sp->objhead, OBJHEAD_MAGIC);
 			CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
-			HSH_DerefObjCore(sp);
-			AZ(sp->objhead);
-			AZ(sp->objcore);
+			HSH_DerefObjCore(sp->wrk, sp->objcore);
+			sp->objhead = NULL;
+			sp->objcore = NULL;
 		}
 		AZ(sp->obj);
 		sp->wrk->bereq = NULL;
@@ -531,8 +531,11 @@
 		AZ(sp->objhead);
 		sp->wrk->cacheable = 0;
 	} else if (!sp->wrk->cacheable) {
-		if (sp->objhead != NULL)
-			HSH_DerefObjCore(sp);
+		if (sp->objhead != NULL) {
+			HSH_DerefObjCore(sp->wrk, sp->objcore);
+			sp->objhead = NULL;
+			sp->objcore = NULL;
+		}
 	}
 
 	/*
@@ -898,18 +901,24 @@
 	VCL_miss_method(sp);
 	switch(sp->handling) {
 	case VCL_RET_ERROR:
-		HSH_DerefObjCore(sp);
+		HSH_DerefObjCore(sp->wrk, sp->objcore);
+		sp->objhead = NULL;
+		sp->objcore = NULL;
 		sp->step = STP_ERROR;
 		return (0);
 	case VCL_RET_PASS:
-		HSH_DerefObjCore(sp);
+		HSH_DerefObjCore(sp->wrk, sp->objcore);
+		sp->objhead = NULL;
+		sp->objcore = NULL;
 		sp->step = STP_PASS;
 		return (0);
 	case VCL_RET_FETCH:
 		sp->step = STP_FETCH;
 		return (0);
 	case VCL_RET_RESTART:
-		HSH_DerefObjCore(sp);
+		HSH_DerefObjCore(sp->wrk, sp->objcore);
+		sp->objhead = NULL;
+		sp->objcore = NULL;
 		INCOMPL();
 	default:
 		WRONG("Illegal action in vcl_miss{}");

Modified: trunk/varnish-cache/bin/varnishd/cache_expire.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_expire.c	2010-11-15 10:39:18 UTC (rev 5540)
+++ trunk/varnish-cache/bin/varnishd/cache_expire.c	2010-11-15 11:11:52 UTC (rev 5541)
@@ -284,10 +284,10 @@
 			oc->flags &= ~OC_F_ONLRU;
 		}
 
-		VSC_main->n_expired++;
-
 		Lck_Unlock(&exp_mtx);
 
+		VSC_main->n_expired++;
+
 		CHECK_OBJ_NOTNULL(oc->objhead, OBJHEAD_MAGIC);
 		if (!(oc->flags & OC_F_PERSISTENT)) {
 			o = oc->obj;
@@ -298,11 +298,7 @@
 		} else {
 			WSL(sp->wrk, SLT_ExpKill, 1, "-1 %d",
 			    (int)(oc->timer_when - t));
-			sp->objhead = oc->objhead;
-			sp->objcore = oc;
-			HSH_DerefObjCore(sp);
-			AZ(sp->objcore);
-			AZ(sp->objhead);
+			HSH_DerefObjCore(sp->wrk, oc);
 			sp->wrk->stats.n_vampireobject--;
 		}
 	}

Modified: trunk/varnish-cache/bin/varnishd/cache_hash.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_hash.c	2010-11-15 10:39:18 UTC (rev 5540)
+++ trunk/varnish-cache/bin/varnishd/cache_hash.c	2010-11-15 11:11:52 UTC (rev 5541)
@@ -621,21 +621,15 @@
 }
 
 void
-HSH_DerefObjCore(struct sess *sp)
+HSH_DerefObjCore(struct worker *wrk, struct objcore *oc)
 {
 	struct objhead *oh;
-	struct objcore *oc;
 
-	CHECK_OBJ_NOTNULL(sp->objhead, OBJHEAD_MAGIC);
-	CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
+	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
+	oh = oc->objhead;
+	CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC);
 
-	oh = sp->objhead;
-	sp->objhead = NULL;
-	oc = sp->objcore;
-	sp->objcore = NULL;
-
 	Lck_Lock(&oh->mtx);
-	assert(oc->objhead == oh);
 	VTAILQ_REMOVE(&oh->objcs, oc, list);
 	if (oc->flags & OC_F_BUSY)
 		hsh_rush(oh);
@@ -643,9 +637,9 @@
 	oc->objhead = NULL;
 	assert(oh->refcnt > 0);
 	FREE_OBJ(oc);
-	sp->wrk->stats.n_objectcore--;
+	wrk->stats.n_objectcore--;
 	if (!hash->deref(oh))
-		HSH_DeleteObjHead(sp->wrk, oh);
+		HSH_DeleteObjHead(wrk, oh);
 }
 
 /*******************************************************************

Modified: trunk/varnish-cache/bin/varnishd/hash_slinger.h
===================================================================
--- trunk/varnish-cache/bin/varnishd/hash_slinger.h	2010-11-15 10:39:18 UTC (rev 5540)
+++ trunk/varnish-cache/bin/varnishd/hash_slinger.h	2010-11-15 11:11:52 UTC (rev 5541)
@@ -61,7 +61,7 @@
 double HSH_Grace(double g);
 void HSH_Init(void);
 void HSH_AddString(const struct sess *sp, const char *str);
-void HSH_DerefObjCore(struct sess *sp);
+void HSH_DerefObjCore(struct worker *sp, struct objcore *oc);
 void HSH_FindBan(struct sess *sp, struct objcore **oc);
 struct objcore *HSH_Insert(const struct sess *sp);
 void HSH_Purge(struct sess *, struct objhead *, double ttl, double grace);




More information about the varnish-commit mailing list