From be2d2ecf33fa759add966e17d4c31209835fab2f Mon Sep 17 00:00:00 2001 From: phk Date: Thu, 7 Sep 2006 08:25:05 +0000 Subject: [PATCH] Insert a bunch of asserts to try to catch anything going wrong git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@945 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishd/storage_file.c | 31 ++++++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/varnish-cache/bin/varnishd/storage_file.c b/varnish-cache/bin/varnishd/storage_file.c index 0a2c2326..df3c9646 100644 --- a/varnish-cache/bin/varnishd/storage_file.c +++ b/varnish-cache/bin/varnishd/storage_file.c @@ -288,6 +288,24 @@ smf_init(struct stevedore *parent, const char *spec) smf_initfile(sc, size, 1); } +/*--------------------------------------------------------------------*/ + +static void +phk(struct smf *sp) +{ + struct smf *sp2; + sp2 = TAILQ_NEXT(sp, order); + if (sp2 != NULL) { + assert(sp2->offset > sp->offset); + assert(sp2->ptr > sp->ptr); + } + sp2 = TAILQ_PREV(sp, smfhead, order); + if (sp2 != NULL) { + assert(sp2->offset < sp->offset); + assert(sp2->ptr < sp->ptr); + } +} + /*-------------------------------------------------------------------- * Insert/Remove from correct freelist */ @@ -298,6 +316,7 @@ insfree(struct smf_sc *sc, struct smf *sp) unsigned b, n; struct smf *sp2; + phk(sp); assert(sp->alloc == 0); assert(sp->flist == NULL); b = sp->size / sc->pagesize; @@ -327,6 +346,7 @@ remfree(struct smf_sc *sc, struct smf *sp) { unsigned b; + phk(sp); assert(sp->alloc == 0); assert(sp->flist != NULL); b = sp->size / sc->pagesize; @@ -356,10 +376,8 @@ alloc_smf(struct smf_sc *sc, size_t bytes) if (b >= NBUCKET) b = NBUCKET - 1; n = 0; - for (sp = NULL; b < NBUCKET; b++) { + for (sp = NULL; sp == NULL && b < NBUCKET; b++) { sp = TAILQ_FIRST(&sc->free[b]); - if (sp != NULL) - break; n++; } if (sp == NULL) @@ -388,6 +406,8 @@ alloc_smf(struct smf_sc *sc, size_t bytes) TAILQ_INSERT_BEFORE(sp, sp2, order); TAILQ_INSERT_TAIL(&sc->used, sp2, status); insfree(sc, sp); + phk(sp); + phk(sp2); return (sp2); } @@ -403,9 +423,10 @@ free_smf(struct smf *sp) struct smf_sc *sc = sp->sc; CHECK_OBJ_NOTNULL(sp, SMF_MAGIC); - TAILQ_REMOVE(&sc->used, sp, status); assert(sp->alloc != 0); + TAILQ_REMOVE(&sc->used, sp, status); sp->alloc = 0; + phk(sp); sp2 = TAILQ_NEXT(sp, order); if (sp2 != NULL && @@ -445,6 +466,8 @@ trim_smf(struct smf *sp, size_t bytes) struct smf *sp2; struct smf_sc *sc = sp->sc; + phk(sp); + assert(sp->alloc != 0); assert(bytes > 0); CHECK_OBJ_NOTNULL(sp, SMF_MAGIC); sp2 = malloc(sizeof *sp2); -- 2.39.5