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