summaryrefslogtreecommitdiff
path: root/lib/libpthread/pthread_lock.c
diff options
context:
space:
mode:
authorskrll <skrll@NetBSD.org>2007-09-17 13:25:59 +0000
committerskrll <skrll@NetBSD.org>2007-09-17 13:25:59 +0000
commitf9577d3adad93eb886a6667d16dbc803397d5aaa (patch)
tree1bf9e8a8ce490ce6518332b8569f0bdd057e7250 /lib/libpthread/pthread_lock.c
parent8b9fcfffdcbf8b6e835b01cad0560f0704204ffb (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.c16
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;
}