aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/stdlib/malloc.c
diff options
context:
space:
mode:
authorJason Evans <jasone@FreeBSD.org>2008-11-30 05:55:24 +0000
committerJason Evans <jasone@FreeBSD.org>2008-11-30 05:55:24 +0000
commit93e34865fa6bfb3d0cf5d531b0c193dd827186f3 (patch)
tree38239dc216b9baa3b61073ab3c3493a6fa446d76 /lib/libc/stdlib/malloc.c
parentcb2394085d534a83f1afe3050d338560efe79cfd (diff)
Notes
Diffstat (limited to 'lib/libc/stdlib/malloc.c')
-rw-r--r--lib/libc/stdlib/malloc.c24
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);
}
/*