tcannot trust system libraries to lock properly. sigh. - plan9port - [fork] Plan 9 from user space (HTM) git clone git://src.adamsgaard.dk/plan9port (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 8be32ce2cb17950569b94273cee6099289c4d022 (DIR) parent 750819026920751b81833cb60270ad7047e75cdc (HTM) Author: rsc <devnull@localhost> Date: Thu, 14 Jul 2005 00:06:43 +0000 cannot trust system libraries to lock properly. sigh. Diffstat: M src/lib9/malloc.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) --- (DIR) diff --git a/src/lib9/malloc.c b/src/lib9/malloc.c t@@ -7,12 +7,19 @@ #define NOPLAN9DEFINES #include <libc.h> +static Lock malloclock; + void* p9malloc(ulong n) { + void *v; + if(n == 0) n++; - return malloc(n); + lock(&malloclock); + v = malloc(n); + unlock(&malloclock); + return v; } void t@@ -20,20 +27,30 @@ 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; - return calloc(a*b, 1); + lock(&malloclock); + v = calloc(a*b, 1); + unlock(&malloclock); + return v; } void* p9realloc(void *v, ulong n) { - return realloc(v, n); + lock(&malloclock); + v = realloc(v, n); + unlock(&malloclock); + return v; }