summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2003-03-26 04:02:24 +0000
committerjeff <jeff@FreeBSD.org>2003-03-26 04:02:24 +0000
commitb16324e722e525519c8428c70f46f6d0b18b9bc1 (patch)
tree23941a59360abf1f23a2109a15011a66807ae876 /lib
parente83d116ac9c75acdc5e784978e799e942dc57d96 (diff)
downloadFreeBSD-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.
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/gen/_spinlock_stub.c9
-rw-r--r--lib/libc/include/spinlock.h3
-rw-r--r--lib/libc_r/uthread/uthread_spinlock.c6
-rw-r--r--lib/libkse/thread/thr_spinlock.c7
-rw-r--r--lib/libpthread/thread/thr_spinlock.c7
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
OpenPOWER on IntegriCloud