summaryrefslogtreecommitdiff
path: root/libcr_ipc/rwmutex.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcr_ipc/rwmutex.c')
-rw-r--r--libcr_ipc/rwmutex.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/libcr_ipc/rwmutex.c b/libcr_ipc/rwmutex.c
index 04016d6..506459a 100644
--- a/libcr_ipc/rwmutex.c
+++ b/libcr_ipc/rwmutex.c
@@ -9,10 +9,8 @@
#define IMPLEMENTATION_FOR_LIBCR_IPC_RWMUTEX_H YES
#include <libcr_ipc/rwmutex.h>
-#include "_linkedlist.h"
-
struct cr_rwmutex_waiter {
- cr_ipc_sll_node;
+ lm_sll_node;
bool is_reader;
cid_t cid;
};
@@ -25,13 +23,13 @@ void cr_rwmutex_lock(cr_rwmutex_t *mu) {
.is_reader = false,
.cid = cr_getcid(),
};
- cr_ipc_sll_push_to_rear(&mu->waiters, &self);
- if (mu->waiters.front != &self.cr_ipc_sll_node || mu->locked)
+ lm_sll_push_to_rear(&mu->waiters, &self);
+ if (mu->waiters.front != &self.lm_sll_node || mu->locked)
cr_pause_and_yield();
- assert(mu->waiters.front == &self.cr_ipc_sll_node);
+ assert(mu->waiters.front == &self.lm_sll_node);
/* We now hold the lock (and are mu->waiters.front). */
- cr_ipc_sll_pop_from_front(&mu->waiters);
+ lm_sll_pop_from_front(&mu->waiters);
assert(mu->nreaders == 0);
mu->locked = true;
mu->unpausing = false;
@@ -45,17 +43,17 @@ void cr_rwmutex_rlock(cr_rwmutex_t *mu) {
.is_reader = true,
.cid = cr_getcid(),
};
- cr_ipc_sll_push_to_rear(&mu->waiters, &self);
- if (mu->waiters.front != &self.cr_ipc_sll_node || (mu->locked && mu->nreaders == 0))
+ lm_sll_push_to_rear(&mu->waiters, &self);
+ if (mu->waiters.front != &self.lm_sll_node || (mu->locked && mu->nreaders == 0))
cr_pause_and_yield();
- assert(mu->waiters.front == &self.cr_ipc_sll_node);
+ assert(mu->waiters.front == &self.lm_sll_node);
/* We now hold the lock (and are mu->waiters.front). */
- cr_ipc_sll_pop_from_front(&mu->waiters);
+ lm_sll_pop_from_front(&mu->waiters);
mu->nreaders++;
mu->locked = true;
struct cr_rwmutex_waiter *waiter = mu->waiters.front
- ? cr_ipc_sll_node_cast(struct cr_rwmutex_waiter, mu->waiters.front)
+ ? lm_sll_node_cast(struct cr_rwmutex_waiter, mu->waiters.front)
: NULL;
if (waiter && waiter->is_reader) {
assert(mu->unpausing);
@@ -74,7 +72,7 @@ void cr_rwmutex_unlock(cr_rwmutex_t *mu) {
assert(!mu->unpausing);
if (mu->waiters.front) {
struct cr_rwmutex_waiter *waiter =
- cr_ipc_sll_node_cast(struct cr_rwmutex_waiter, mu->waiters.front);
+ lm_sll_node_cast(struct cr_rwmutex_waiter, mu->waiters.front);
mu->unpausing = true;
cr_unpause(waiter->cid);
} else {
@@ -92,7 +90,7 @@ void cr_rwmutex_runlock(cr_rwmutex_t *mu) {
if (mu->nreaders == 0 && !mu->unpausing) {
if (mu->waiters.front) {
struct cr_rwmutex_waiter *waiter =
- cr_ipc_sll_node_cast(struct cr_rwmutex_waiter, mu->waiters.front);
+ lm_sll_node_cast(struct cr_rwmutex_waiter, mu->waiters.front);
assert(!waiter->is_reader);
mu->unpausing = true;
cr_unpause(waiter->cid);