|  | /* | 
|  | * These are here mainly so that I can link against | 
|  | * debugmalloc.c instead and not recompile the world. | 
|  | */ | 
|  |  | 
|  | #include <u.h> | 
|  | #define NOPLAN9DEFINES | 
|  | #include <libc.h> | 
|  |  | 
|  | static Lock malloclock; | 
|  |  | 
|  | void* | 
|  | p9malloc(ulong n) | 
|  | { | 
|  | void *v; | 
|  |  | 
|  | if(n == 0) | 
|  | n++; | 
|  | lock(&malloclock); | 
|  | v = malloc(n); | 
|  | unlock(&malloclock); | 
|  | return v; | 
|  | } | 
|  |  | 
|  | void | 
|  | p9free(void *v) | 
|  | { | 
|  | if(v == nil) | 
|  | return; | 
|  | lock(&malloclock); | 
|  | free(v); | 
|  | unlock(&malloclock); | 
|  | } | 
|  |  | 
|  | void* | 
|  | p9calloc(ulong a, ulong b) | 
|  | { | 
|  | void *v; | 
|  |  | 
|  | if(a*b == 0) | 
|  | a = b = 1; | 
|  |  | 
|  | lock(&malloclock); | 
|  | v = calloc(a*b, 1); | 
|  | unlock(&malloclock); | 
|  | return v; | 
|  | } | 
|  |  | 
|  | void* | 
|  | p9realloc(void *v, ulong n) | 
|  | { | 
|  | lock(&malloclock); | 
|  | v = realloc(v, n); | 
|  | unlock(&malloclock); | 
|  | return v; | 
|  | } |