diff options
author | Jason Evans <jasone@FreeBSD.org> | 2008-11-30 05:55:24 +0000 |
---|---|---|
committer | Jason Evans <jasone@FreeBSD.org> | 2008-11-30 05:55:24 +0000 |
commit | 93e34865fa6bfb3d0cf5d531b0c193dd827186f3 (patch) | |
tree | 38239dc216b9baa3b61073ab3c3493a6fa446d76 /lib/libc/stdlib/malloc.c | |
parent | cb2394085d534a83f1afe3050d338560efe79cfd (diff) |
Notes
Diffstat (limited to 'lib/libc/stdlib/malloc.c')
-rw-r--r-- | lib/libc/stdlib/malloc.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c index 55bc4133a324..4b37e721aec1 100644 --- a/lib/libc/stdlib/malloc.c +++ b/lib/libc/stdlib/malloc.c @@ -1262,18 +1262,20 @@ malloc_spin_lock(pthread_mutex_t *lock) if (__isthreaded) { if (_pthread_mutex_trylock(lock) != 0) { - unsigned i; - volatile unsigned j; - - /* Exponentially back off. */ - for (i = 1; i <= SPIN_LIMIT_2POW; i++) { - for (j = 0; j < (1U << i); j++) { - ret++; - CPU_SPINWAIT; + /* Exponentially back off if there are multiple CPUs. */ + if (ncpus > 1) { + unsigned i; + volatile unsigned j; + + for (i = 1; i <= SPIN_LIMIT_2POW; i++) { + for (j = 0; j < (1U << i); j++) { + ret++; + CPU_SPINWAIT; + } + + if (_pthread_mutex_trylock(lock) == 0) + return (ret); } - - if (_pthread_mutex_trylock(lock) == 0) - return (ret); } /* |