• Home
  • Raw
  • Download

Lines Matching refs:mbox

11 void mbox_init(struct mailbox *mbox, size_t size)  in mbox_init()  argument
13 if (!!mbox) { in mbox_init()
14 sem_init(&mbox->prod_sem, size); /* All slots empty */ in mbox_init()
15 sem_init(&mbox->cons_sem, 0); /* No slots full */ in mbox_init()
16 sem_init(&mbox->head_sem, 1); /* Head mutex */ in mbox_init()
17 sem_init(&mbox->tail_sem, 1); /* Tail mutex */ in mbox_init()
19 mbox->wrap = &mbox->data[size]; in mbox_init()
20 mbox->head = &mbox->data[0]; in mbox_init()
21 mbox->tail = &mbox->data[0]; in mbox_init()
25 int mbox_post(struct mailbox *mbox, void *msg, mstime_t timeout) in mbox_post() argument
27 if (!mbox_is_valid(mbox)) in mbox_post()
29 if (sem_down(&mbox->prod_sem, timeout) == (mstime_t)-1) in mbox_post()
31 sem_down(&mbox->head_sem, 0); in mbox_post()
33 *mbox->head = msg; in mbox_post()
34 mbox->head++; in mbox_post()
35 if (mbox->head == mbox->wrap) in mbox_post()
36 mbox->head = &mbox->data[0]; in mbox_post()
38 sem_up(&mbox->head_sem); in mbox_post()
39 sem_up(&mbox->cons_sem); in mbox_post()
43 mstime_t mbox_fetch(struct mailbox *mbox, void **msg, mstime_t timeout) in mbox_fetch() argument
47 if (!mbox) in mbox_fetch()
49 t = sem_down(&mbox->cons_sem, timeout); in mbox_fetch()
52 t += sem_down(&mbox->tail_sem, 0); in mbox_fetch()
55 *msg = *mbox->tail; in mbox_fetch()
56 mbox->tail++; in mbox_fetch()
57 if (mbox->tail == mbox->wrap) in mbox_fetch()
58 mbox->tail = &mbox->data[0]; in mbox_fetch()
60 sem_up(&mbox->tail_sem); in mbox_fetch()
61 sem_up(&mbox->prod_sem); in mbox_fetch()