From: phk Date: Wed, 2 Aug 2006 04:57:58 +0000 (+0000) Subject: More miniobj paranoia X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=91bc5b06470ea6944af4419b6a01b118b6d2ca6c;p=varnish More miniobj paranoia git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@594 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/bin/varnishd/cache_hash.c b/varnish-cache/bin/varnishd/cache_hash.c index 5b8f9116..fab90746 100644 --- a/varnish-cache/bin/varnishd/cache_hash.c +++ b/varnish-cache/bin/varnishd/cache_hash.c @@ -162,8 +162,11 @@ HSH_Ref(struct object *o) { struct objhead *oh; + CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC); oh = o->objhead; + CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC); AZ(pthread_mutex_lock(&oh->mtx)); + assert(o->refcnt > 0); o->refcnt++; AZ(pthread_mutex_unlock(&oh->mtx)); } @@ -175,10 +178,13 @@ HSH_Deref(struct object *o) struct storage *st, *stn; unsigned r; + CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC); oh = o->objhead; + CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC); /* drop ref on object */ AZ(pthread_mutex_lock(&oh->mtx)); + assert(o->refcnt > 0); r = --o->refcnt; if (!r) TAILQ_REMOVE(&oh->objects, o, list); @@ -193,6 +199,7 @@ HSH_Deref(struct object *o) } TAILQ_FOREACH_SAFE(st, &o->store, list, stn) { + CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC); TAILQ_REMOVE(&o->store, st, list); st->stevedore->free(st); } diff --git a/varnish-cache/bin/varnishd/hash_classic.c b/varnish-cache/bin/varnishd/hash_classic.c index 0b0f99c9..33df6106 100644 --- a/varnish-cache/bin/varnishd/hash_classic.c +++ b/varnish-cache/bin/varnishd/hash_classic.c @@ -174,9 +174,11 @@ hcl_deref(struct objhead *oh) CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC); CAST_OBJ_NOTNULL(he, oh->hashpriv, HCL_ENTRY_MAGIC); + assert(he->refcnt > 0); + assert(he->mtx < hcl_nmtx); + assert(he->hash < hcl_nhash); mtx = he->mtx; AZ(pthread_mutex_lock(&hcl_mutex[mtx])); - assert(he->refcnt > 0); if (--he->refcnt > 0) { AZ(pthread_mutex_unlock(&hcl_mutex[mtx])); return (1);