Blob


1 #include <u.h>
2 #define NOPLAN9DEFINES
3 #include <libc.h>
5 /*
6 * The Unix libc routines cannot be trusted to do their own locking.
7 * Sad but apparently true.
8 */
10 static Lock malloclock;
12 void*
13 p9malloc(ulong n)
14 {
15 void *v;
16 if(n == 0)
17 n++;
18 //fprint(2, "%s %d malloc\n", argv0, getpid());
19 lock(&malloclock);
20 v = malloc(n);
21 unlock(&malloclock);
22 //fprint(2, "%s %d donemalloc\n", argv0, getpid());
23 return v;
24 }
26 void
27 p9free(void *v)
28 {
29 //fprint(2, "%s %d free\n", argv0, getpid());
30 lock(&malloclock);
31 free(v);
32 unlock(&malloclock);
33 //fprint(2, "%s %d donefree\n", argv0, getpid());
34 }
36 void*
37 p9calloc(ulong a, ulong b)
38 {
39 void *v;
41 //fprint(2, "%s %d calloc\n", argv0, getpid());
42 lock(&malloclock);
43 v = calloc(a, b);
44 unlock(&malloclock);
45 //fprint(2, "%s %d donecalloc\n", argv0, getpid());
46 return v;
47 }
49 void*
50 p9realloc(void *v, ulong n)
51 {
52 //fprint(2, "%s %d realloc\n", argv0, getpid());
53 lock(&malloclock);
54 v = realloc(v, n);
55 unlock(&malloclock);
56 //fprint(2, "%s %d donerealloc\n", argv0, getpid());
57 return v;
58 }