/*
* Copyright 2000, International Business Machines Corporation and others.
* All Rights Reserved.
- *
+ *
* This software has been released under the terms of the IBM Public
* License. For details, see the LICENSE file in the top-level source
* directory or online at http://www.openafs.org/dl/license10.html
#include <afsconfig.h>
#include <afs/param.h>
-RCSID
- ("$Header$");
+#include <roken.h>
+#include <afs/opr.h>
-#ifdef AFS_PTHREAD_ENV
-#include <afs/assert.h>
-#else /* AFS_PTHREAD_ENV */
-#include <assert.h>
-#endif /* AFS_PTHRED_ENV */
#include "lwp.h"
#include "lock.h"
-#include <stdio.h>
#define FALSE 0
#define TRUE 1
lock->wait_states = 0;
lock->num_waiting = 0;
#ifdef AFS_PTHREAD_ENV
- assert(pthread_mutex_init(&lock->mutex, (const pthread_mutexattr_t *)0) ==
- 0);
- assert(pthread_cond_init(&lock->read_cv, (const pthread_condattr_t *)0) ==
- 0);
- assert(pthread_cond_init(&lock->write_cv, (const pthread_condattr_t *)0)
- == 0);
-#endif /* AFS_PTHRED_ENV */
+ opr_mutex_init(&lock->mutex);
+ opr_cv_init(&lock->read_cv);
+ opr_cv_init(&lock->write_cv);
+#endif /* AFS_PTHREAD_ENV */
}
void
Lock_Destroy(struct Lock *lock)
{
#ifdef AFS_PTHREAD_ENV
- assert(pthread_mutex_destroy(&lock->mutex) == 0);
- assert(pthread_cond_destroy(&lock->read_cv) == 0);
- assert(pthread_cond_destroy(&lock->write_cv) == 0);
-#endif /* AFS_PTHRED_ENV */
+ opr_mutex_destroy(&lock->mutex);
+ opr_cv_destroy(&lock->read_cv);
+ opr_cv_destroy(&lock->write_cv);
+#endif /* AFS_PTHREAD_ENV */
}
-\f
+
void
Afs_Lock_Obtain(struct Lock *lock, int how)
{
do {
lock->wait_states |= READ_LOCK;
#ifdef AFS_PTHREAD_ENV
- assert(pthread_cond_wait(&lock->read_cv, &lock->mutex) == 0);
+ opr_cv_wait(&lock->read_cv, &lock->mutex);
#else /* AFS_PTHREAD_ENV */
LWP_WaitProcess(&lock->readers_reading);
#endif /* AFS_PTHREAD_ENV */
do {
lock->wait_states |= WRITE_LOCK;
#ifdef AFS_PTHREAD_ENV
- assert(pthread_cond_wait(&lock->write_cv, &lock->mutex) == 0);
+ opr_cv_wait(&lock->write_cv, &lock->mutex);
#else /* AFS_PTHREAD_ENV */
LWP_WaitProcess(&lock->excl_locked);
#endif /* AFS_PTHREAD_ENV */
do {
lock->wait_states |= SHARED_LOCK;
#ifdef AFS_PTHREAD_ENV
- assert(pthread_cond_wait(&lock->write_cv, &lock->mutex) == 0);
+ opr_cv_wait(&lock->write_cv, &lock->mutex);
#else /* AFS_PTHREAD_ENV */
LWP_WaitProcess(&lock->excl_locked);
#endif /* AFS_PTHREAD_ENV */
do {
lock->wait_states |= WRITE_LOCK;
#ifdef AFS_PTHREAD_ENV
- assert(pthread_cond_wait(&lock->write_cv, &lock->mutex) == 0);
+ opr_cv_wait(&lock->write_cv, &lock->mutex);
#else /* AFS_PTHREAD_ENV */
LWP_WaitProcess(&lock->excl_locked);
#endif /* AFS_PTHREAD_ENV */
default:
printf("Can't happen, bad LOCK type: %d\n", how);
- assert(0);
+ opr_Assert(0);
}
}
if (lock->wait_states & READ_LOCK) {
lock->wait_states &= ~READ_LOCK;
#ifdef AFS_PTHREAD_ENV
- assert(pthread_cond_broadcast(&lock->read_cv) == 0);
+ opr_cv_broadcast(&lock->read_cv);
#else /* AFS_PTHREAD_ENV */
LWP_NoYieldSignal(&lock->readers_reading);
#endif /* AFS_PTHREAD_ENV */
if (lock->wait_states & READ_LOCK) {
lock->wait_states &= ~READ_LOCK;
#ifdef AFS_PTHREAD_ENV
- assert(pthread_cond_broadcast(&lock->read_cv) == 0);
+ opr_cv_broadcast(&lock->read_cv);
#else /* AFS_PTHREAD_ENV */
LWP_NoYieldSignal(&lock->readers_reading);
#endif /* AFS_PTHREAD_ENV */
} else {
lock->wait_states &= ~EXCL_LOCKS;
#ifdef AFS_PTHREAD_ENV
- assert(pthread_cond_broadcast(&lock->write_cv) == 0);
+ opr_cv_broadcast(&lock->write_cv);
#else /* AFS_PTHREAD_ENV */
LWP_NoYieldSignal(&lock->excl_locked);
#endif /* AFS_PTHREAD_ENV */
if (lock->wait_states & EXCL_LOCKS) {
lock->wait_states &= ~EXCL_LOCKS;
#ifdef AFS_PTHREAD_ENV
- assert(pthread_cond_broadcast(&lock->write_cv) == 0);
+ opr_cv_broadcast(&lock->write_cv);
#else /* AFS_PTHREAD_ENV */
LWP_NoYieldSignal(&lock->excl_locked);
#endif /* AFS_PTHREAD_ENV */
} else {
lock->wait_states &= ~READ_LOCK;
#ifdef AFS_PTHREAD_ENV
- assert(pthread_cond_broadcast(&lock->read_cv) == 0);
+ opr_cv_broadcast(&lock->read_cv);
#else /* AFS_PTHREAD_ENV */
LWP_NoYieldSignal(&lock->readers_reading);
#endif /* AFS_PTHREAD_ENV */
/* release a write lock and sleep on an address, atomically */
void
-LWP_WaitProcessR(register void *addr, register struct Lock *alock)
+LWP_WaitProcessR(void *addr, struct Lock *alock)
{
ReleaseReadLock(alock);
LWP_WaitProcess(addr);
/* release a write lock and sleep on an address, atomically */
void
-LWP_WaitProcessW(register void *addr, register struct Lock *alock)
+LWP_WaitProcessW(void *addr, struct Lock *alock)
{
ReleaseWriteLock(alock);
LWP_WaitProcess(addr);
/* release a write lock and sleep on an address, atomically */
void
-LWP_WaitProcessS(register void *addr, register struct Lock *alock)
+LWP_WaitProcessS(void *addr, struct Lock *alock)
{
ReleaseSharedLock(alock);
LWP_WaitProcess(addr);