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