ChunkSize = 128*1024
};
-
void
vtfree(void *p)
{
- if(p == 0)
- return;
free(p);
}
void *
-vtmalloc(int size)
+vtmalloc(ulong size)
{
- void *p;
-
- p = malloc(size);
- if(p == 0)
- sysfatal("vtmalloc: out of memory");
+ void *p = mallocz(size, 0);
+ if(p == nil){
+ fprint(2, "vtmalloc: out of memory allocating %lud", size);
+ abort();
+ }
setmalloctag(p, getcallerpc(&size));
return p;
}
void *
-vtmallocz(int size)
+vtmallocz(ulong size)
{
- void *p = vtmalloc(size);
- memset(p, 0, size);
+ void *p = mallocz(size, 1);
+ if(p == nil){
+ fprint(2, "vtmallocz: out of memory allocating %lud", size);
+ abort();
+ }
setmalloctag(p, getcallerpc(&size));
return p;
}
void *
-vtrealloc(void *p, int size)
+vtrealloc(void *p, ulong size)
{
- if(p == nil)
- return vtmalloc(size);
p = realloc(p, size);
- if(p == 0)
- sysfatal("vtMemRealloc: out of memory");
+ if(p == 0 && size != 0){
+ fprint(2, "vtrealloc: out of memory allocating %lud", size);
+ abort();
+ }
setrealloctag(p, getcallerpc(&size));
return p;
}
void *
-vtbrk(int n)
+vtbrk(ulong n)
{
static Lock lk;
static uchar *buf;
- static int nbuf, nchunk;
- int align, pad;
+ static ulong nbuf, nchunk;
+ ulong align, pad;
void *p;
if(n >= IdealAlignment)
else
align = 4;
+ if(n > ChunkSize){
+ p = sbrk(n);
+ if(p == (void*)-1)
+ sysfatal("Failed to allocate permanent chunk size %lud", n);
+ memset(p, 0, n);
+ return (uchar*)p;
+ }
lock(&lk);
pad = (align - (uintptr)buf) & (align-1);
if(n + pad > nbuf) {
- buf = vtmallocz(ChunkSize);
+ buf = sbrk(ChunkSize);
+ if(buf == (void*)-1)
+ sysfatal("Failed to allocate permanent chunk size %ud", ChunkSize);
+ memset(buf, 0, ChunkSize);
nbuf = ChunkSize;
pad = (align - (uintptr)buf) & (align-1);
nchunk++;