diff options
Diffstat (limited to 'libcr_ipc/chan.c')
-rw-r--r-- | libcr_ipc/chan.c | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/libcr_ipc/chan.c b/libcr_ipc/chan.c index 6ccfa44..6cbe890 100644 --- a/libcr_ipc/chan.c +++ b/libcr_ipc/chan.c @@ -16,17 +16,17 @@ /* base channels **************************************************************/ struct cr_chan_waiter { - lm_dll_node; cid_t cid; void *val_ptr; void (*dequeue)(void *, size_t); void *dequeue_arg1; size_t dequeue_arg2; }; +DLIST_DECLARE_NODE(_cr_chan_waiter_list, struct cr_chan_waiter); void cr_chan_dequeue(void *_ch, size_t) { struct _cr_chan *ch = _ch; - lm_dll_pop_from_front(&ch->waiters); + dlist_pop_from_front(&ch->waiters); } void _cr_chan_xfer(enum _cr_chan_waiter_typ self_typ, struct _cr_chan *ch, void *val_ptr, size_t val_size) { @@ -35,23 +35,23 @@ void _cr_chan_xfer(enum _cr_chan_waiter_typ self_typ, struct _cr_chan *ch, void if (ch->waiters.front && ch->waiter_typ != self_typ) { /* non-blocking fast-path */ /* Copy. */ - struct cr_chan_waiter *front = lm_dll_node_cast(struct cr_chan_waiter, ch->waiters.front); + struct _cr_chan_waiter_list_node *front = ch->waiters.front; if (self_typ == _CR_CHAN_SENDER) - memcpy(front->val_ptr, val_ptr, val_size); + memcpy(front->val.val_ptr, val_ptr, val_size); else - memcpy(val_ptr, front->val_ptr, val_size); - cr_unpause(front->cid); - front->dequeue(front->dequeue_arg1, - front->dequeue_arg2); + memcpy(val_ptr, front->val.val_ptr, val_size); + cr_unpause(front->val.cid); + front->val.dequeue(front->val.dequeue_arg1, + front->val.dequeue_arg2); cr_yield(); } else { /* blocking slow-path */ - struct cr_chan_waiter self = { + struct _cr_chan_waiter_list_node self = { .val = { .cid = cr_getcid(), .val_ptr = val_ptr, .dequeue = cr_chan_dequeue, .dequeue_arg1 = ch, - }; - lm_dll_push_to_rear(&ch->waiters, &self); + }}; + dlist_push_to_rear(&ch->waiters, &self); ch->waiter_typ = self_typ; cr_pause_and_yield(); } @@ -66,9 +66,9 @@ enum cr_select_class { }; struct cr_select_waiters { - size_t cnt; - struct cr_select_arg *args; - struct cr_chan_waiter *nodes; + size_t cnt; + struct cr_select_arg *args; + struct _cr_chan_waiter_list_node *nodes; }; static inline enum cr_select_class cr_select_getclass(struct cr_select_arg arg) { @@ -93,8 +93,8 @@ static inline enum cr_select_class cr_select_getclass(struct cr_select_arg arg) void cr_select_dequeue(void *_waiters, size_t idx) { struct cr_select_waiters *waiters = _waiters; for (size_t i = 0; i < waiters->cnt; i++) - lm_dll_remove(&(waiters->args[i].ch->waiters), - &(waiters->nodes[i])); + dlist_remove(&(waiters->args[i].ch->waiters), + &(waiters->nodes[i])); waiters->cnt = idx; } @@ -153,14 +153,14 @@ size_t cr_select_v(size_t arg_cnt, struct cr_select_arg arg_vec[]) { .nodes = alloca(sizeof(struct cr_chan_waiter) * arg_cnt), }; for (size_t i = 0; i < arg_cnt; i++) { - waiters.nodes[i] = (struct cr_chan_waiter){ + waiters.nodes[i] = (struct _cr_chan_waiter_list_node){ .val = { .cid = cr_getcid(), .val_ptr = arg_vec[i].val_ptr, .dequeue = cr_select_dequeue, .dequeue_arg1 = &waiters, .dequeue_arg2 = i, - }; - lm_dll_push_to_rear(&arg_vec[i].ch->waiters, &waiters.nodes[i]); + }}; + dlist_push_to_rear(&arg_vec[i].ch->waiters, &waiters.nodes[i]); } cr_pause_and_yield(); return waiters.cnt; |