From d526ee0750815820ac70e030ff87775ac56785e3 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Mon, 11 Mar 2013 00:55:26 +0100 Subject: ape/malloc: make malloc and free threadsafe for python --- sys/src/ape/lib/ap/plan9/malloc.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'sys/src/ape/lib/ap/plan9/malloc.c') diff --git a/sys/src/ape/lib/ap/plan9/malloc.c b/sys/src/ape/lib/ap/plan9/malloc.c index 09f3c178e..07caf78d7 100644 --- a/sys/src/ape/lib/ap/plan9/malloc.c +++ b/sys/src/ape/lib/ap/plan9/malloc.c @@ -1,6 +1,8 @@ #include #include +#include + typedef unsigned int uint; enum @@ -24,6 +26,7 @@ typedef struct Arena Arena; struct Arena { Bucket *btab[MAX2SIZE]; + Lock; }; static Arena arena; @@ -47,16 +50,19 @@ malloc(size_t size) return nil; good: /* Allocate off this list */ + lock(&arena); bp = arena.btab[pow]; if(bp) { arena.btab[pow] = bp->next; + unlock(&arena); if(bp->magic != 0) abort(); bp->magic = MAGIC; - return bp->data; + return bp->data; } + size = sizeof(Bucket)+(1<size = pow; bp->magic = MAGIC; @@ -106,8 +117,10 @@ free(void *ptr) bp->magic = 0; l = &arena.btab[bp->size]; + lock(&arena); bp->next = *l; *l = bp; + unlock(&arena); } void* -- cgit v1.2.3