diff options
Diffstat (limited to 'src/malloc/oldmalloc')
| -rw-r--r-- | src/malloc/oldmalloc/malloc.c | 19 | 
1 files changed, 19 insertions, 0 deletions
| diff --git a/src/malloc/oldmalloc/malloc.c b/src/malloc/oldmalloc/malloc.c index 0c082bce..53f5f959 100644 --- a/src/malloc/oldmalloc/malloc.c +++ b/src/malloc/oldmalloc/malloc.c @@ -9,6 +9,7 @@  #include "atomic.h"  #include "pthread_impl.h"  #include "malloc_impl.h" +#include "fork_impl.h"  #define malloc __libc_malloc  #define realloc __libc_realloc @@ -531,3 +532,21 @@ void __malloc_donate(char *start, char *end)  	c->csize = n->psize = C_INUSE | (end-start);  	__bin_chunk(c);  } + +void __malloc_atfork(int who) +{ +	if (who<0) { +		lock(mal.split_merge_lock); +		for (int i=0; i<64; i++) +			lock(mal.bins[i].lock); +	} else if (!who) { +		for (int i=0; i<64; i++) +			unlock(mal.bins[i].lock); +		unlock(mal.split_merge_lock); +	} else { +		for (int i=0; i<64; i++) +			mal.bins[i].lock[0] = mal.bins[i].lock[1] = 0; +		mal.split_merge_lock[1] = 0; +		mal.split_merge_lock[0] = 0; +	} +} | 
