From: phk Date: Wed, 19 Nov 2008 10:21:30 +0000 (+0000) Subject: Move the hash'ers refcount up to objhead, it is generic. X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2da2754c608f77f20ac3a8609b50f678559f9b48;p=varnish Move the hash'ers refcount up to objhead, it is generic. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@3404 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/bin/varnishd/cache.h b/varnish-cache/bin/varnishd/cache.h index 4267738a..601bdd11 100644 --- a/varnish-cache/bin/varnishd/cache.h +++ b/varnish-cache/bin/varnishd/cache.h @@ -297,6 +297,7 @@ struct objhead { void *hashpriv; struct lock mtx; + unsigned refcnt; VTAILQ_HEAD(,object) objects; char *hash; unsigned hashlen; diff --git a/varnish-cache/bin/varnishd/hash_classic.c b/varnish-cache/bin/varnishd/hash_classic.c index fe208d53..280d50eb 100644 --- a/varnish-cache/bin/varnishd/hash_classic.c +++ b/varnish-cache/bin/varnishd/hash_classic.c @@ -49,7 +49,6 @@ struct hcl_entry { VTAILQ_ENTRY(hcl_entry) list; struct hcl_hd *head; struct objhead *oh; - unsigned refcnt; unsigned digest; unsigned hash; }; @@ -167,7 +166,7 @@ hcl_lookup(const struct sess *sp, struct objhead *noh) continue; if (i > 0) break; - he->refcnt++; + he->oh->refcnt++; roh = he->oh; Lck_Unlock(&hp->mtx); /* @@ -191,7 +190,7 @@ hcl_lookup(const struct sess *sp, struct objhead *noh) VTAILQ_INSERT_BEFORE(he, he2, list); else VTAILQ_INSERT_TAIL(&hp->head, he2, list); - he2->refcnt++; + he2->oh->refcnt++; noh = he2->oh; Lck_Unlock(&hp->mtx); return (noh); @@ -231,11 +230,11 @@ hcl_deref(const struct objhead *oh) CAST_OBJ_NOTNULL(he, oh->hashpriv, HCL_ENTRY_MAGIC); hp = he->head; CHECK_OBJ_NOTNULL(hp, HCL_HEAD_MAGIC); - assert(he->refcnt > 0); + assert(he->oh->refcnt > 0); assert(he->hash < hcl_nhash); assert(hp == &hcl_head[he->hash]); Lck_Lock(&hp->mtx); - if (--he->refcnt == 0) + if (--he->oh->refcnt == 0) VTAILQ_REMOVE(&hp->head, he, list); else he = NULL; diff --git a/varnish-cache/bin/varnishd/hash_simple_list.c b/varnish-cache/bin/varnishd/hash_simple_list.c index ac2ff68c..a317b761 100644 --- a/varnish-cache/bin/varnishd/hash_simple_list.c +++ b/varnish-cache/bin/varnishd/hash_simple_list.c @@ -47,7 +47,6 @@ struct hsl_entry { VTAILQ_ENTRY(hsl_entry) list; struct objhead *oh; - unsigned refcnt; }; static VTAILQ_HEAD(, hsl_entry) hsl_head = VTAILQ_HEAD_INITIALIZER(hsl_head); @@ -85,7 +84,7 @@ hsl_lookup(const struct sess *sp, struct objhead *noh) continue; if (i > 0) break; - he->refcnt++; + he->oh->refcnt++; noh = he->oh; Lck_Unlock(&hsl_mtx); return (noh); @@ -94,7 +93,7 @@ hsl_lookup(const struct sess *sp, struct objhead *noh) he2 = calloc(sizeof *he2, 1); XXXAN(he2); he2->oh = noh; - he2->refcnt = 1; + he2->oh->refcnt = 1; noh->hashpriv = he2; noh->hash = malloc(sp->lhashptr); @@ -124,7 +123,7 @@ hsl_deref(const struct objhead *oh) AN(oh->hashpriv); he = oh->hashpriv; Lck_Lock(&hsl_mtx); - if (--he->refcnt == 0) { + if (--he->oh->refcnt == 0) { VTAILQ_REMOVE(&hsl_head, he, list); free(he); ret = 0;