diff options
Diffstat (limited to 'libcr_ipc/rwmutex.c')
-rw-r--r-- | libcr_ipc/rwmutex.c | 26 |
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); |