diff options
| author | skrll <skrll@NetBSD.org> | 2007-09-17 13:25:59 +0000 |
|---|---|---|
| committer | skrll <skrll@NetBSD.org> | 2007-09-17 13:25:59 +0000 |
| commit | f9577d3adad93eb886a6667d16dbc803397d5aaa (patch) | |
| tree | 1bf9e8a8ce490ce6518332b8569f0bdd057e7250 /lib/libpthread/pthread_lock.c | |
| parent | 8b9fcfffdcbf8b6e835b01cad0560f0704204ffb (diff) | |
Mostly fix the restartable atomic sequences by reversing the sense of the
lock check and test for return value.
At least alpha looks broken me and some are sub-optimal.
"Looks good to me" from ad.
Diffstat (limited to 'lib/libpthread/pthread_lock.c')
| -rw-r--r-- | lib/libpthread/pthread_lock.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/libpthread/pthread_lock.c b/lib/libpthread/pthread_lock.c index bbe58d902d1..d23f4eb5ebb 100644 --- a/lib/libpthread/pthread_lock.c +++ b/lib/libpthread/pthread_lock.c @@ -1,4 +1,4 @@ -/* $NetBSD: pthread_lock.c,v 1.27 2007/09/10 11:34:05 skrll Exp $ */ +/* $NetBSD: pthread_lock.c,v 1.28 2007/09/17 13:25:59 skrll Exp $ */ /*- * Copyright (c) 2001, 2006, 2007 The NetBSD Foundation, Inc. @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: pthread_lock.c,v 1.27 2007/09/10 11:34:05 skrll Exp $"); +__RCSID("$NetBSD: pthread_lock.c,v 1.28 2007/09/17 13:25:59 skrll Exp $"); #include <sys/types.h> #include <sys/lock.h> @@ -92,17 +92,17 @@ pthread__simple_lock_init(__cpu_simple_lock_t *alp) int pthread__simple_lock_try(__cpu_simple_lock_t *alp) { - int unlocked; + int locked; if (pthread__atomic) return __cpu_simple_lock_try(alp); RAS_START(pthread__lock); - unlocked = __SIMPLELOCK_UNLOCKED_P(alp); + locked = __SIMPLELOCK_LOCKED_P(alp); __cpu_simple_lock_set(alp); RAS_END(pthread__lock); - return unlocked; + return !locked; } inline void @@ -138,14 +138,14 @@ pthread_spinlock(pthread_spin_t *lock) if (__predict_true(__cpu_simple_lock_try(lock))) return; } else { - int unlocked; + int locked; RAS_START(pthread__lock2); - unlocked = __SIMPLELOCK_UNLOCKED_P(lock); + locked = __SIMPLELOCK_LOCKED_P(lock); __cpu_simple_lock_set(lock); RAS_END(pthread__lock2); - if (__predict_true(unlocked)) + if (__predict_true(!locked)) return; } |
