aboutsummaryrefslogtreecommitdiff
path: root/libthreads/rwlock.h
diff options
context:
space:
mode:
Diffstat (limited to 'libthreads/rwlock.h')
-rw-r--r--libthreads/rwlock.h38
1 files changed, 25 insertions, 13 deletions
diff --git a/libthreads/rwlock.h b/libthreads/rwlock.h
index 7abbfff1..44d9a35d 100644
--- a/libthreads/rwlock.h
+++ b/libthreads/rwlock.h
@@ -21,6 +21,13 @@
#include <cthreads.h>
#include <assert.h>
+#include <features.h>
+
+#ifdef RWLOCK_DEFINE_EI
+#define RWLOCK_EI
+#else
+#define RWLOCK_EI __extern_inline
+#endif
struct rwlock
{
@@ -31,17 +38,20 @@ struct rwlock
int readers_waiting;
};
-#ifdef _RWLOCK_DEFINE_FUNCTIONS
-#undef _EXTERN_INLINE
-#define _EXTERN_INLINE
-#else /* ! _RWLOCK_DEFINE_FUNCTIONS */
-#ifndef _EXTERN_INLINE
-#define _EXTERN_INLINE extern __inline
-#endif
-#endif /* _RWLOCK_DEFINE_FUNCTIONS */
+extern void rwlock_reader_lock (struct rwlock *lock);
+
+extern void rwlock_writer_lock (struct rwlock *lock);
+
+extern void rwlock_reader_unlock (struct rwlock *lock);
+
+extern void rwlock_writer_unlock (struct rwlock *lock);
+
+extern void rwlock_init (struct rwlock *lock);
+
+#if defined(__USE_EXTERN_INLINES) || defined(RWLOCK_DEFINE_EI)
/* Get a reader lock on reader-writer lock LOCK for disknode DN */
-_EXTERN_INLINE void
+RWLOCK_EI void
rwlock_reader_lock (struct rwlock *lock)
{
mutex_lock (&lock->master);
@@ -58,7 +68,7 @@ rwlock_reader_lock (struct rwlock *lock)
}
/* Get a writer lock on reader-writer lock LOCK for disknode DN */
-_EXTERN_INLINE void
+RWLOCK_EI void
rwlock_writer_lock (struct rwlock *lock)
{
mutex_lock (&lock->master);
@@ -75,7 +85,7 @@ rwlock_writer_lock (struct rwlock *lock)
}
/* Release a reader lock on reader-writer lock LOCK for disknode DN */
-_EXTERN_INLINE void
+RWLOCK_EI void
rwlock_reader_unlock (struct rwlock *lock)
{
mutex_lock (&lock->master);
@@ -87,7 +97,7 @@ rwlock_reader_unlock (struct rwlock *lock)
}
/* Release a writer lock on reader-writer lock LOCK for disknode DN */
-_EXTERN_INLINE void
+RWLOCK_EI void
rwlock_writer_unlock (struct rwlock *lock)
{
mutex_lock (&lock->master);
@@ -99,7 +109,7 @@ rwlock_writer_unlock (struct rwlock *lock)
}
/* Initialize reader-writer lock LOCK */
-_EXTERN_INLINE void
+RWLOCK_EI void
rwlock_init (struct rwlock *lock)
{
mutex_init (&lock->master);
@@ -109,6 +119,8 @@ rwlock_init (struct rwlock *lock)
lock->writers_waiting = 0;
}
+#endif /* Use extern inlines. */
+
#define RWLOCK_INITIALIZER \
{ MUTEX_INITIALIZER, CONDITION_INITIALIZER, 0, 0, 0 }