From ea6ad2e99404eaed5f2545be9f69c18f1f84fde8 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Wed, 20 Nov 1996 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1996-11-20 --- port/alloc.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/port/alloc.c b/port/alloc.c index b0d221b5aa84bd9171e3fb7d217279e52bc5a6d0..f4b2c2b3e0a6efead76941762be4990cab5ff8d2 100644 --- a/port/alloc.c +++ b/port/alloc.c @@ -254,9 +254,8 @@ xhole(ulong addr, ulong size) void* mallocz(ulong size, int zero) { - ulong next; int pow, n; - Bucket *bp, *nbp; + Bucket *bp, **l; for(pow = 3; pow <= Maxpow; pow++) if(size <= (1<next = (Bucket*)next; - nbp->size = pow; - nbp = nbp->next; + l = &arena.btab[pow]; + /* add all but the last to the free list */ + while(--n){ + bp->size = pow; + bp->next = *l; + *l = bp; + bp = (Bucket*)((ulong)bp+size); } - nbp->size = pow; iunlock(&arena); } else { @@ -370,7 +367,7 @@ free(void *ptr) bp = (Bucket*)((ulong)ptr - bdatoff); if(bp->magic != Magic2n) - panic("free %lux %lux", bp->magic, bp->pc); + panic("free %lux %lux %lux", bp->magic, bp->pc, getcallerpc(ptr)); bp->magic = 0; ilock(&arena);