Commit 62aaddc5 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Be much more paranoid about objhead refcounts



git-svn-id: http://www.varnish-cache.org/svn/trunk@4548 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 3d806089
...@@ -290,6 +290,7 @@ HSH_Insert(const struct sess *sp) ...@@ -290,6 +290,7 @@ HSH_Insert(const struct sess *sp)
if (oh == w->nobjhead) if (oh == w->nobjhead)
w->nobjhead = NULL; w->nobjhead = NULL;
Lck_Lock(&oh->mtx); Lck_Lock(&oh->mtx);
assert(oh->refcnt > 0);
/* Insert (precreated) objcore in objecthead */ /* Insert (precreated) objcore in objecthead */
oc = w->nobjcore; oc = w->nobjcore;
...@@ -337,17 +338,16 @@ HSH_Lookup(struct sess *sp, struct objhead **poh) ...@@ -337,17 +338,16 @@ HSH_Lookup(struct sess *sp, struct objhead **poh)
CHECK_OBJ_NOTNULL(sp->objhead, OBJHEAD_MAGIC); CHECK_OBJ_NOTNULL(sp->objhead, OBJHEAD_MAGIC);
oh = sp->objhead; oh = sp->objhead;
sp->objhead = NULL; sp->objhead = NULL;
CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC);
Lck_Lock(&oh->mtx);
} else { } else {
AN(w->nobjhead); AN(w->nobjhead);
oh = hash->lookup(sp, w->nobjhead); oh = hash->lookup(sp, w->nobjhead);
CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC);
if (oh == w->nobjhead) if (oh == w->nobjhead)
w->nobjhead = NULL; w->nobjhead = NULL;
Lck_Lock(&oh->mtx);
} }
CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC);
Lck_Lock(&oh->mtx);
assert(oh->refcnt > 0);
busy_oc = NULL; busy_oc = NULL;
grace_oc = NULL; grace_oc = NULL;
VTAILQ_FOREACH(oc, &oh->objcs, list) { VTAILQ_FOREACH(oc, &oh->objcs, list) {
...@@ -532,6 +532,7 @@ HSH_Unbusy(const struct sess *sp) ...@@ -532,6 +532,7 @@ HSH_Unbusy(const struct sess *sp)
"Object %u workspace free %u", o->xid, WS_Free(o->ws_o)); "Object %u workspace free %u", o->xid, WS_Free(o->ws_o));
Lck_Lock(&oh->mtx); Lck_Lock(&oh->mtx);
assert(oh->refcnt > 0);
o->objcore->flags &= ~OC_F_BUSY; o->objcore->flags &= ~OC_F_BUSY;
hsh_rush(oh); hsh_rush(oh);
AN(o->ban); AN(o->ban);
......
...@@ -72,7 +72,7 @@ struct objhead { ...@@ -72,7 +72,7 @@ struct objhead {
#define OBJHEAD_MAGIC 0x1b96615d #define OBJHEAD_MAGIC 0x1b96615d
struct lock mtx; struct lock mtx;
unsigned refcnt; int refcnt;
VTAILQ_HEAD(,objcore) objcs; VTAILQ_HEAD(,objcore) objcs;
unsigned char digest[DIGEST_LEN]; unsigned char digest[DIGEST_LEN];
union { union {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment