summaryrefslogtreecommitdiff
path: root/src/pkg/runtime/mfixalloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/mfixalloc.c')
-rw-r--r--src/pkg/runtime/mfixalloc.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/pkg/runtime/mfixalloc.c b/src/pkg/runtime/mfixalloc.c
index dd4f3f251..8347a1539 100644
--- a/src/pkg/runtime/mfixalloc.c
+++ b/src/pkg/runtime/mfixalloc.c
@@ -21,6 +21,8 @@ FixAlloc_Init(FixAlloc *f, uintptr size, void *(*alloc)(uintptr), void (*first)(
f->list = nil;
f->chunk = nil;
f->nchunk = 0;
+ f->inuse = 0;
+ f->sys = 0;
}
void*
@@ -31,9 +33,11 @@ FixAlloc_Alloc(FixAlloc *f)
if(f->list) {
v = f->list;
f->list = *(void**)f->list;
+ f->inuse += f->size;
return v;
}
if(f->nchunk < f->size) {
+ f->sys += FixAllocChunk;
f->chunk = f->alloc(FixAllocChunk);
if(f->chunk == nil)
throw("out of memory (FixAlloc)");
@@ -44,12 +48,14 @@ FixAlloc_Alloc(FixAlloc *f)
f->first(f->arg, v);
f->chunk += f->size;
f->nchunk -= f->size;
+ f->inuse += f->size;
return v;
}
void
FixAlloc_Free(FixAlloc *f, void *p)
{
+ f->inuse -= f->size;
*(void**)p = f->list;
f->list = p;
}