diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/malloc/oldmalloc/malloc.c | 4 | 
1 files changed, 4 insertions, 0 deletions
| diff --git a/src/malloc/oldmalloc/malloc.c b/src/malloc/oldmalloc/malloc.c index a5cbdb68..25d00d44 100644 --- a/src/malloc/oldmalloc/malloc.c +++ b/src/malloc/oldmalloc/malloc.c @@ -481,12 +481,14 @@ void __bin_chunk(struct chunk *self)  	if (size > RECLAIM && (size^(size-osize)) > size-osize) {  		uintptr_t a = (uintptr_t)self + SIZE_ALIGN+PAGE_SIZE-1 & -PAGE_SIZE;  		uintptr_t b = (uintptr_t)next - SIZE_ALIGN & -PAGE_SIZE; +		int e = errno;  #if 1  		__madvise((void *)a, b-a, MADV_DONTNEED);  #else  		__mmap((void *)a, b-a, PROT_READ|PROT_WRITE,  			MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, -1, 0);  #endif +		errno = e;  	}  	unlock_bin(i); @@ -499,7 +501,9 @@ static void unmap_chunk(struct chunk *self)  	size_t len = CHUNK_SIZE(self) + extra;  	/* Crash on double free */  	if (extra & 1) a_crash(); +	int e = errno;  	__munmap(base, len); +	errno = e;  }  void free(void *p) | 
