diff options
author | jasone <jasone@FreeBSD.org> | 2008-11-03 21:17:18 +0000 |
---|---|---|
committer | jasone <jasone@FreeBSD.org> | 2008-11-03 21:17:18 +0000 |
commit | 9df0eb1bf3abcd3baad30f9593ec04993fd8056d (patch) | |
tree | 3003ac9eb634a37623e6d93b4ab3f2d2d6cc424c /lib/libc/stdlib/malloc.c | |
parent | 9757361d220b602cdbb092515812a7b76957eb26 (diff) | |
download | FreeBSD-src-9df0eb1bf3abcd3baad30f9593ec04993fd8056d.zip FreeBSD-src-9df0eb1bf3abcd3baad30f9593ec04993fd8056d.tar.gz |
Revert to preferring mmap(2) over sbrk(2) when mapping memory, due to
potential extreme contention in the kernel for multi-threaded applications
on SMP systems.
Reported by: kris
Diffstat (limited to 'lib/libc/stdlib/malloc.c')
-rw-r--r-- | lib/libc/stdlib/malloc.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c index 00b169f..55bc413 100644 --- a/lib/libc/stdlib/malloc.c +++ b/lib/libc/stdlib/malloc.c @@ -1536,11 +1536,6 @@ base_pages_alloc(size_t minsize) { #ifdef MALLOC_DSS - if (opt_dss) { - if (base_pages_alloc_dss(minsize) == false) - return (false); - } - if (opt_mmap && minsize != 0) #endif { @@ -1548,6 +1543,14 @@ base_pages_alloc(size_t minsize) return (false); } +#ifdef MALLOC_DSS + if (opt_dss) { + if (base_pages_alloc_dss(minsize) == false) + return (false); + } + +#endif + return (true); } @@ -1984,6 +1987,15 @@ chunk_alloc(size_t size, bool zero) assert((size & chunksize_mask) == 0); #ifdef MALLOC_DSS + if (opt_mmap) +#endif + { + ret = chunk_alloc_mmap(size); + if (ret != NULL) + goto RETURN; + } + +#ifdef MALLOC_DSS if (opt_dss) { ret = chunk_recycle_dss(size, zero); if (ret != NULL) { @@ -1994,14 +2006,7 @@ chunk_alloc(size_t size, bool zero) if (ret != NULL) goto RETURN; } - - if (opt_mmap) #endif - { - ret = chunk_alloc_mmap(size); - if (ret != NULL) - goto RETURN; - } /* All strategies for allocation failed. */ ret = NULL; |