r4194 - trunk/varnish-cache/bin/varnishd

phk at projects.linpro.no phk at projects.linpro.no
Tue Aug 18 13:14:35 CEST 2009


Author: phk
Date: 2009-08-18 13:14:35 +0200 (Tue, 18 Aug 2009)
New Revision: 4194

Modified:
   trunk/varnish-cache/bin/varnishd/cache.h
   trunk/varnish-cache/bin/varnishd/cache_ban.c
   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/cache_vrt.c
   trunk/varnish-cache/bin/varnishd/storage_persistent.c
Log:
Move the objhead reference from the object to the objcore, we need it
for expiry of non-instantiated objects from -spersistent



Modified: trunk/varnish-cache/bin/varnishd/cache.h
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache.h	2009-08-18 10:35:18 UTC (rev 4193)
+++ trunk/varnish-cache/bin/varnishd/cache.h	2009-08-18 11:14:35 UTC (rev 4194)
@@ -281,6 +281,7 @@
 	unsigned		magic;
 #define OBJCORE_MAGIC		0x4d301302
 	struct object		*obj;
+	struct objhead		*objhead;
 	double			timer_when;
 	unsigned char		flags;
 #define OC_F_ONLRU		(1<<0)
@@ -301,7 +302,6 @@
 #define OBJECT_MAGIC		0x32851d42
 	unsigned		refcnt;
 	unsigned		xid;
-	struct objhead		*objhead;
 	struct storage		*objstore;
 	struct objcore		*objcore;
 

Modified: trunk/varnish-cache/bin/varnishd/cache_ban.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_ban.c	2009-08-18 10:35:18 UTC (rev 4193)
+++ trunk/varnish-cache/bin/varnishd/cache_ban.c	2009-08-18 11:14:35 UTC (rev 4194)
@@ -157,9 +157,10 @@
 {
 	(void)sp;
 	CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
-	CHECK_OBJ_NOTNULL(o->objhead, OBJHEAD_MAGIC);
-	AN(o->objhead->hash);
-	return(ban_cond_str(bt, o->objhead->hash));
+	CHECK_OBJ_NOTNULL(o->objcore, OBJCORE_MAGIC);
+	CHECK_OBJ_NOTNULL(o->objcore->objhead, OBJHEAD_MAGIC);
+	AN(o->objcore->objhead->hash);
+	return(ban_cond_str(bt, o->objcore->objhead->hash));
 }
 
 static int

Modified: trunk/varnish-cache/bin/varnishd/cache_center.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_center.c	2009-08-18 10:35:18 UTC (rev 4193)
+++ trunk/varnish-cache/bin/varnishd/cache_center.c	2009-08-18 11:14:35 UTC (rev 4194)
@@ -175,7 +175,7 @@
 	CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
 
 	sp->t_resp = TIM_real();
-	if (sp->obj->objhead != NULL) {
+	if (sp->obj->objcore != NULL) {
 		if ((sp->t_resp - sp->obj->last_lru) > params->lru_timeout &&
 		    EXP_Touch(sp->obj))
 			sp->obj->last_lru = sp->t_resp;	/* XXX: locking ? */
@@ -505,7 +505,7 @@
 		CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
 		sp->objcore->obj = sp->obj;
 		sp->obj->objcore = sp->objcore;
-		sp->obj->objhead = sp->objhead;
+		sp->objcore->objhead = sp->objhead;
 		sp->objhead = NULL;	/* refcnt follows pointer. */
 		sp->objcore = NULL;	/* refcnt follows pointer. */
 	}

Modified: trunk/varnish-cache/bin/varnishd/cache_expire.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_expire.c	2009-08-18 10:35:18 UTC (rev 4193)
+++ trunk/varnish-cache/bin/varnishd/cache_expire.c	2009-08-18 11:14:35 UTC (rev 4194)
@@ -128,11 +128,10 @@
 	struct objcore_head *lru;
 
 	CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
-	AN(o->objhead);
+	CHECK_OBJ_NOTNULL(o->objcore, OBJCORE_MAGIC);
 	AN(ObjIsBusy(o));
 	assert(o->cacheable);
 	HSH_Ref(o);
-	CHECK_OBJ_NOTNULL(o->objcore, OBJCORE_MAGIC);
 	oc = o->objcore;
 
 	assert(o->entered != 0 && !isnan(o->entered));
@@ -175,8 +174,8 @@
 	lru = STV_lru(o->objstore);
 	if (lru == NULL)
 		return (retval);
-	AN(o->objhead);
 	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
+	CHECK_OBJ_NOTNULL(oc->objhead, OBJHEAD_MAGIC);
 	if (Lck_Trylock(&exp_mtx))
 		return (retval);
 	if (oc->flags & OC_F_ONLRU) {
@@ -274,11 +273,13 @@
 		/* And from LRU */
 		if (oc->flags & OC_F_ONLRU) {
 			assert(!(oc->flags & OC_F_PERSISTENT));
+			o = oc->obj;
 			lru = STV_lru(o->objstore);
 			AN(lru);
 			VTAILQ_REMOVE(lru, o->objcore, lru_list);
 			oc->flags &= ~OC_F_ONLRU;
 		} else {
+			o = NULL;
 			assert(oc->flags & OC_F_PERSISTENT);
 		}
 
@@ -289,11 +290,14 @@
 		if (!(oc->flags & OC_F_PERSISTENT)) {
 			o = oc->obj;
 			CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
+			CHECK_OBJ_NOTNULL(oc->objhead, OBJHEAD_MAGIC);
+			WSL(sp->wrk, SLT_ExpKill, 0, "%u %d",
+			    o->xid, (int)(o->ttl - t));
 			HSH_Deref(sp->wrk, &o);
-			CHECK_OBJ_NOTNULL(o->objhead, OBJHEAD_MAGIC);
+		} else {
+			WSL(sp->wrk, SLT_ExpKill, 0, "%u %d",
+			    o, (int)(oc->timer_when - t));
 		}
-		WSL(sp->wrk, SLT_ExpKill, 0, "%u %d",
-		    o->xid, (int)(o->ttl - t));
 	}
 }
 

Modified: trunk/varnish-cache/bin/varnishd/cache_hash.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_hash.c	2009-08-18 10:35:18 UTC (rev 4193)
+++ trunk/varnish-cache/bin/varnishd/cache_hash.c	2009-08-18 11:14:35 UTC (rev 4194)
@@ -589,7 +589,8 @@
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
 	o = sp->obj;
 	CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
-	oh = o->objhead;
+	CHECK_OBJ_NOTNULL(o->objcore, OBJCORE_MAGIC);
+	oh = o->objcore->objhead;
 	CHECK_OBJ(oh, OBJHEAD_MAGIC);
 
 	AN(ObjIsBusy(o));
@@ -616,7 +617,8 @@
 	struct objhead *oh;
 
 	CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
-	oh = o->objhead;
+	CHECK_OBJ_NOTNULL(o->objcore, OBJCORE_MAGIC);
+	oh = o->objcore->objhead;
 	CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC);
 	Lck_Lock(&oh->mtx);
 	assert(o->refcnt > 0);
@@ -660,16 +662,15 @@
 	o = *oo;
 	*oo = NULL;
 	CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
-	oh = o->objhead;
-	if (oh == NULL) {
-		oc = NULL;
+	oc = o->objcore;
+	if (oc == NULL) {
 		assert(o->refcnt > 0);
 		r = --o->refcnt;
+		oh = NULL;
 	} else {
+		CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
+		oh = oc->objhead;
 		CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC);
-
-		oc = o->objcore;
-		CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
 		
 		Lck_Lock(&oh->mtx);
 		assert(oh->refcnt > 0);
@@ -706,11 +707,11 @@
 	o = NULL;
 	w->stats->n_object--;
 
-	if (oh == NULL) {
-		AZ(oc);
+	if (oc == NULL) {
+		AZ(oh);
 		return;
 	}
-	AN(oc);
+	AN(oh);
 	FREE_OBJ(oc);
 	/* Drop our ref on the objhead */
 	assert(oh->refcnt > 0);

Modified: trunk/varnish-cache/bin/varnishd/cache_vrt.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_vrt.c	2009-08-18 10:35:18 UTC (rev 4193)
+++ trunk/varnish-cache/bin/varnishd/cache_vrt.c	2009-08-18 11:14:35 UTC (rev 4194)
@@ -731,10 +731,11 @@
 	if (sp->obj == NULL)
 		return (NULL);
 	CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);
-	if (sp->obj->objhead == NULL)
+	if (sp->obj->objcore == NULL)
 		return (NULL);
-	CHECK_OBJ_NOTNULL(sp->obj->objhead, OBJHEAD_MAGIC);
-	return (sp->obj->objhead->hash);
+	CHECK_OBJ_NOTNULL(sp->obj->objcore, OBJCORE_MAGIC);
+	CHECK_OBJ_NOTNULL(sp->obj->objcore->objhead, OBJHEAD_MAGIC);
+	return (sp->obj->objcore->objhead->hash);
 }
 
 unsigned

Modified: trunk/varnish-cache/bin/varnishd/storage_persistent.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/storage_persistent.c	2009-08-18 10:35:18 UTC (rev 4193)
+++ trunk/varnish-cache/bin/varnishd/storage_persistent.c	2009-08-18 11:14:35 UTC (rev 4194)
@@ -623,7 +623,7 @@
 	/* refcnt is one because the object is in the hash */
 	oc->obj->refcnt = 1;
 	oc->obj->objcore = oc;
-	oc->obj->objhead = oh;
+	oc->objhead = oh;
 	oc->obj->ban = oc->ban;
 
 	sg->nfixed++;
@@ -1067,7 +1067,7 @@
 	}
 	assert(sg->nalloc < sg->maxobj);
 	so = &sg->objs[sg->nalloc++];
-	memcpy(so->hash, sp->obj->objhead->digest, DIGEST_LEN);
+	memcpy(so->hash, sp->obj->objcore->objhead->digest, DIGEST_LEN);
 	so->ttl = sp->obj->ttl;
 	so->ptr = sp->obj;
 	so->ban = sp->obj->ban_t;



More information about the varnish-commit mailing list