Commit e852a475 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Fix an reference count issue relating to non-instantiated objects.



git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@4212 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 99b35c5f
......@@ -506,6 +506,7 @@ ban_lurker(struct sess *sp, void *priv)
struct ban *b, *bf;
struct objcore *oc;
struct object *o;
int i;
(void)priv;
while (1) {
......@@ -542,9 +543,10 @@ ban_lurker(struct sess *sp, void *priv)
TIM_sleep(1.0);
continue;
}
AZ(oc->flags & OC_F_PERSISTENT);
o = oc->obj;
(void)ban_check_object(o, sp, 0);
WSP(sp, SLT_Debug, "lurker: %p %g", oc, o->ttl);
i = ban_check_object(o, sp, 0);
WSP(sp, SLT_Debug, "lurker: %p %g %d", oc, o->ttl, i);
HSH_Deref(sp->wrk, &o);
TIM_sleep(params->ban_lurker_sleep);
}
......
......@@ -101,6 +101,7 @@ EXP_Inject(struct objcore *oc, struct objcore *lrut, double ttl)
{
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
CHECK_OBJ_NOTNULL(lrut, OBJCORE_MAGIC);
Lck_Lock(&exp_mtx);
assert(oc->timer_idx == BINHEAP_NOIDX);
......@@ -260,7 +261,6 @@ exp_timer(struct sess *sp, void *priv)
continue;
}
/* It's time... */
CHECK_OBJ_NOTNULL(oc->objhead, OBJHEAD_MAGIC);
......
......@@ -401,6 +401,7 @@ HSH_Insert(const struct sess *sp)
/* Insert (precreated) objcore in objecthead */
oc = w->nobjcore;
w->nobjcore = NULL;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
AZ(oc->flags & OC_F_BUSY);
/* XXX: Should this not be ..._HEAD now ? */
......@@ -681,13 +682,13 @@ HSH_FindBan(struct sess *sp, struct objcore **oc)
CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC);
Lck_Lock(&oh->mtx);
VTAILQ_FOREACH(oc2, &oh->objcs, list)
if (oc1 == oc2) {
oc1->obj->refcnt++;
if (oc1 == oc2)
break;
}
if (oc2 != NULL && oc2->flags & OC_F_PERSISTENT)
SMP_Fixup(sp, oh, oc2);
Lck_Unlock(&oc1->objhead->mtx);
if (oc2 != NULL)
oc2->obj->refcnt++;
Lck_Unlock(&oh->mtx);
*oc = oc2;
}
......
......@@ -836,6 +836,7 @@ smp_load_seg(struct sess *sp, const struct smp_sc *sc, struct smp_seg *sg)
oc->ban = BAN_RefBan(oc, so->ban, sc->tailban);
memcpy(sp->wrk->nobjhead->digest, so->hash, SHA256_LEN);
(void)HSH_Insert(sp);
AZ(sp->wrk->nobjcore);
EXP_Inject(oc, sc->parent->lru_tail, so->ttl);
sg->nalloc++;
}
......@@ -993,6 +994,7 @@ smp_thread(struct sess *sp, void *priv)
sc->flags |= SMP_F_LOADED;
BAN_Deref(&sc->tailban);
sc->tailban = NULL;
printf("Silo completely loaded\n");
while (1)
sleep (1);
return (NULL);
......
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