malloc: remove locking
The issue manifests in fork: POSIX fork mandates that a fork'd process is created with a single thread. If a multithreaded program forks, and some thread was in malloc() when the fork() happened, then in the child the lock will be held but there will be no thread to release it. We assume the system malloc() must already know how to deal with this and is thread-safe, but it won't know about our custom spinlock. Judging that this is no longer necessary (the lock code was added 15 years ago) we remove it. Signed-off-by: Dan Cross <cross@gajendra.net>
This commit is contained in:
@@ -7,8 +7,6 @@
|
||||
#define NOPLAN9DEFINES
|
||||
#include <libc.h>
|
||||
|
||||
static Lock malloclock;
|
||||
|
||||
void*
|
||||
p9malloc(ulong n)
|
||||
{
|
||||
@@ -16,9 +14,7 @@ p9malloc(ulong n)
|
||||
|
||||
if(n == 0)
|
||||
n++;
|
||||
lock(&malloclock);
|
||||
v = malloc(n);
|
||||
unlock(&malloclock);
|
||||
print("p9malloc %lud => %p; pc %lux\n", n, v, getcallerpc(&n));
|
||||
return v;
|
||||
}
|
||||
@@ -28,10 +24,8 @@ p9free(void *v)
|
||||
{
|
||||
if(v == nil)
|
||||
return;
|
||||
lock(&malloclock);
|
||||
print("p9free %p; pc %lux\n", v, getcallerpc(&v));
|
||||
free(v);
|
||||
unlock(&malloclock);
|
||||
}
|
||||
|
||||
void*
|
||||
@@ -42,9 +36,7 @@ p9calloc(ulong a, ulong b)
|
||||
if(a*b == 0)
|
||||
a = b = 1;
|
||||
|
||||
lock(&malloclock);
|
||||
v = calloc(a*b, 1);
|
||||
unlock(&malloclock);
|
||||
print("p9calloc %lud %lud => %p; pc %lux\n", a, b, v, getcallerpc(&a));
|
||||
return v;
|
||||
}
|
||||
@@ -54,9 +46,7 @@ p9realloc(void *v, ulong n)
|
||||
{
|
||||
void *vv;
|
||||
|
||||
lock(&malloclock);
|
||||
vv = realloc(v, n);
|
||||
unlock(&malloclock);
|
||||
print("p9realloc %p %lud => %p; pc %lux\n", v, n, vv, getcallerpc(&v));
|
||||
return vv;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user