From 8562e5b08027692b9a31552d59055ac5acd15e68 Mon Sep 17 00:00:00 2001 From: jasone Date: Sun, 30 Nov 2008 05:55:24 +0000 Subject: Do not spin when trying to lock on a single-CPU system. Reported by: davidxu --- lib/libc/stdlib/malloc.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c index 55bc413..4b37e72 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); } /* -- cgit v1.1