cannot trust system libraries to lock properly. sigh.
This commit is contained in:
parent
7508190269
commit
8be32ce2cb
1 changed files with 20 additions and 3 deletions
|
|
@ -7,12 +7,19 @@
|
||||||
#define NOPLAN9DEFINES
|
#define NOPLAN9DEFINES
|
||||||
#include <libc.h>
|
#include <libc.h>
|
||||||
|
|
||||||
|
static Lock malloclock;
|
||||||
|
|
||||||
void*
|
void*
|
||||||
p9malloc(ulong n)
|
p9malloc(ulong n)
|
||||||
{
|
{
|
||||||
|
void *v;
|
||||||
|
|
||||||
if(n == 0)
|
if(n == 0)
|
||||||
n++;
|
n++;
|
||||||
return malloc(n);
|
lock(&malloclock);
|
||||||
|
v = malloc(n);
|
||||||
|
unlock(&malloclock);
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -20,20 +27,30 @@ p9free(void *v)
|
||||||
{
|
{
|
||||||
if(v == nil)
|
if(v == nil)
|
||||||
return;
|
return;
|
||||||
|
lock(&malloclock);
|
||||||
free(v);
|
free(v);
|
||||||
|
unlock(&malloclock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void*
|
void*
|
||||||
p9calloc(ulong a, ulong b)
|
p9calloc(ulong a, ulong b)
|
||||||
{
|
{
|
||||||
|
void *v;
|
||||||
|
|
||||||
if(a*b == 0)
|
if(a*b == 0)
|
||||||
a = b = 1;
|
a = b = 1;
|
||||||
|
|
||||||
return calloc(a*b, 1);
|
lock(&malloclock);
|
||||||
|
v = calloc(a*b, 1);
|
||||||
|
unlock(&malloclock);
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
void*
|
void*
|
||||||
p9realloc(void *v, ulong n)
|
p9realloc(void *v, ulong n)
|
||||||
{
|
{
|
||||||
return realloc(v, n);
|
lock(&malloclock);
|
||||||
|
v = realloc(v, n);
|
||||||
|
unlock(&malloclock);
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue