diff options
author | jeff <jeff@FreeBSD.org> | 2003-03-26 04:02:24 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2003-03-26 04:02:24 +0000 |
commit | b16324e722e525519c8428c70f46f6d0b18b9bc1 (patch) | |
tree | 23941a59360abf1f23a2109a15011a66807ae876 | |
parent | e83d116ac9c75acdc5e784978e799e942dc57d96 (diff) | |
download | FreeBSD-src-b16324e722e525519c8428c70f46f6d0b18b9bc1.zip FreeBSD-src-b16324e722e525519c8428c70f46f6d0b18b9bc1.tar.gz |
- Define a _spinunlock() function so that threading implementations may do
more complicated things than just setting the lock to 0.
- Implement stubs for this function in libc and the two threading libraries
that are currently in the tree.
-rw-r--r-- | lib/libc/gen/_spinlock_stub.c | 9 | ||||
-rw-r--r-- | lib/libc/include/spinlock.h | 3 | ||||
-rw-r--r-- | lib/libc_r/uthread/uthread_spinlock.c | 6 | ||||
-rw-r--r-- | lib/libkse/thread/thr_spinlock.c | 7 | ||||
-rw-r--r-- | lib/libpthread/thread/thr_spinlock.c | 7 |
5 files changed, 31 insertions, 1 deletions
diff --git a/lib/libc/gen/_spinlock_stub.c b/lib/libc/gen/_spinlock_stub.c index e53fdb4..85faf28 100644 --- a/lib/libc/gen/_spinlock_stub.c +++ b/lib/libc/gen/_spinlock_stub.c @@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$"); */ __weak_reference(_atomic_lock_stub, _atomic_lock); __weak_reference(_spinlock_stub, _spinlock); +__weak_reference(_spinlock_stub, _spinunlock); __weak_reference(_spinlock_debug_stub, _spinlock_debug); @@ -65,6 +66,14 @@ _spinlock_stub(spinlock_t *lck) } /* + * This function is a stub for the spinunlock function in libpthread. + */ +void +_spinunlock_stub(spinlock_t *lck) +{ +} + +/* * This function is a stub for the debug spinlock function in libpthread. */ void diff --git a/lib/libc/include/spinlock.h b/lib/libc/include/spinlock.h index d661ecf..6334253 100644 --- a/lib/libc/include/spinlock.h +++ b/lib/libc/include/spinlock.h @@ -52,7 +52,7 @@ typedef struct { #define _SPINLOCK_INITIALIZER { 0, 0, 0, 0 } -#define _SPINUNLOCK(_lck) (_lck)->access_lock = 0 +#define _SPINUNLOCK(_lck) _spinunlock(_lck); #ifdef _LOCK_DEBUG #define _SPINLOCK(_lck) _spinlock_debug(_lck, __FILE__, __LINE__) #else @@ -65,6 +65,7 @@ typedef struct { __BEGIN_DECLS long _atomic_lock(volatile long *); void _spinlock(spinlock_t *); +void _spinunlock(spinlock_t *); void _spinlock_debug(spinlock_t *, char *, int); __END_DECLS diff --git a/lib/libc_r/uthread/uthread_spinlock.c b/lib/libc_r/uthread/uthread_spinlock.c index e05aa4a..0c8eae3 100644 --- a/lib/libc_r/uthread/uthread_spinlock.c +++ b/lib/libc_r/uthread/uthread_spinlock.c @@ -44,6 +44,12 @@ #include "pthread_private.h" +void +_spinunlock(spinlock_t *lck) +{ + lck->access_lock = 0; +} + /* * Lock a location for the running thread. Yield to allow other * threads to run if this thread is blocked because the lock is diff --git a/lib/libkse/thread/thr_spinlock.c b/lib/libkse/thread/thr_spinlock.c index 544ea3c..ad7b222 100644 --- a/lib/libkse/thread/thr_spinlock.c +++ b/lib/libkse/thread/thr_spinlock.c @@ -44,6 +44,13 @@ #include "thr_private.h" +void +_spinunlock(spinlock_t *lck) +{ + lck->access_lock = 0; +} + + /* * Lock a location for the running thread. Yield to allow other * threads to run if this thread is blocked because the lock is diff --git a/lib/libpthread/thread/thr_spinlock.c b/lib/libpthread/thread/thr_spinlock.c index 544ea3c..ad7b222 100644 --- a/lib/libpthread/thread/thr_spinlock.c +++ b/lib/libpthread/thread/thr_spinlock.c @@ -44,6 +44,13 @@ #include "thr_private.h" +void +_spinunlock(spinlock_t *lck) +{ + lck->access_lock = 0; +} + + /* * Lock a location for the running thread. Yield to allow other * threads to run if this thread is blocked because the lock is |