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);  			}  			/* | 
