#include <afs/param.h>
#include <roken.h>
-
#include <afs/opr.h>
-#ifdef AFS_PTHREAD_ENV
-#include <rx/rx.h>
-#endif
-
-#include <assert.h>
-
#include "lwp.h"
#include "lock.h"
lock->wait_states = 0;
lock->num_waiting = 0;
#ifdef AFS_PTHREAD_ENV
- MUTEX_INIT(&lock->mutex, "lock", MUTEX_DEFAULT, 0);
- CV_INIT(&lock->read_cv, "read", CV_DEFAULT, 0);
- CV_INIT(&lock->write_cv, "write", CV_DEFAULT, 0);
+ opr_Verify(pthread_mutex_init(&lock->mutex, NULL) == 0);
+ opr_Verify(pthread_cond_init(&lock->read_cv, NULL) == 0);
+ opr_Verify(pthread_cond_init(&lock->write_cv, NULL) == 0);
#endif /* AFS_PTHREAD_ENV */
}
Lock_Destroy(struct Lock *lock)
{
#ifdef AFS_PTHREAD_ENV
- MUTEX_DESTROY(&lock->mutex);
- CV_DESTROY(&lock->read_cv);
- CV_DESTROY(&lock->write_cv);
+ opr_Verify(pthread_mutex_destroy(&lock->mutex) == 0);
+ opr_Verify(pthread_cond_destroy(&lock->read_cv) == 0);
+ opr_Verify(pthread_cond_destroy(&lock->write_cv) == 0);
#endif /* AFS_PTHREAD_ENV */
}
do {
lock->wait_states |= READ_LOCK;
#ifdef AFS_PTHREAD_ENV
- CV_WAIT(&lock->read_cv, &lock->mutex);
+ opr_Verify(pthread_cond_wait(&lock->read_cv, &lock->mutex) == 0);
#else /* AFS_PTHREAD_ENV */
LWP_WaitProcess(&lock->readers_reading);
#endif /* AFS_PTHREAD_ENV */
do {
lock->wait_states |= WRITE_LOCK;
#ifdef AFS_PTHREAD_ENV
- CV_WAIT(&lock->write_cv, &lock->mutex);
+ opr_Verify(pthread_cond_wait(&lock->write_cv, &lock->mutex) == 0);
#else /* AFS_PTHREAD_ENV */
LWP_WaitProcess(&lock->excl_locked);
#endif /* AFS_PTHREAD_ENV */
do {
lock->wait_states |= SHARED_LOCK;
#ifdef AFS_PTHREAD_ENV
- CV_WAIT(&lock->write_cv, &lock->mutex);
+ opr_Verify(pthread_cond_wait(&lock->write_cv, &lock->mutex) == 0);
#else /* AFS_PTHREAD_ENV */
LWP_WaitProcess(&lock->excl_locked);
#endif /* AFS_PTHREAD_ENV */
do {
lock->wait_states |= WRITE_LOCK;
#ifdef AFS_PTHREAD_ENV
- CV_WAIT(&lock->write_cv, &lock->mutex);
+ opr_Verify(pthread_cond_wait(&lock->write_cv, &lock->mutex) == 0);
#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
- CV_BROADCAST(&lock->read_cv);
+ opr_Verify(pthread_cond_broadcast(&lock->read_cv) == 0);
#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
- CV_BROADCAST(&lock->read_cv);
+ opr_Verify(pthread_cond_broadcast(&lock->read_cv) == 0);
#else /* AFS_PTHREAD_ENV */
LWP_NoYieldSignal(&lock->readers_reading);
#endif /* AFS_PTHREAD_ENV */
} else {
lock->wait_states &= ~EXCL_LOCKS;
#ifdef AFS_PTHREAD_ENV
- CV_BROADCAST(&lock->write_cv);
+ opr_Verify(pthread_cond_broadcast(&lock->write_cv) == 0);
#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
- CV_BROADCAST(&lock->write_cv);
+ opr_Verify(pthread_cond_broadcast(&lock->write_cv) == 0);
#else /* AFS_PTHREAD_ENV */
LWP_NoYieldSignal(&lock->excl_locked);
#endif /* AFS_PTHREAD_ENV */
} else {
lock->wait_states &= ~READ_LOCK;
#ifdef AFS_PTHREAD_ENV
- CV_BROADCAST(&lock->read_cv);
+ opr_Verify(pthread_cond_broadcast(&lock->read_cv) == 0);
#else /* AFS_PTHREAD_ENV */
LWP_NoYieldSignal(&lock->readers_reading);
#endif /* AFS_PTHREAD_ENV */