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
*/
unsigned b, n;
struct smf *sp2;
+ phk(sp);
assert(sp->alloc == 0);
assert(sp->flist == NULL);
b = sp->size / sc->pagesize;
{
unsigned b;
+ phk(sp);
assert(sp->alloc == 0);
assert(sp->flist != NULL);
b = sp->size / sc->pagesize;
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)
TAILQ_INSERT_BEFORE(sp, sp2, order);
TAILQ_INSERT_TAIL(&sc->used, sp2, status);
insfree(sc, sp);
+ phk(sp);
+ phk(sp2);
return (sp2);
}
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 &&
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);