diff options
author | H. Peter Anvin <hpa@zytor.com> | 2009-09-09 16:29:15 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-09-09 16:29:15 -0700 |
commit | 7c15367c10a7f086ef9523065299a982032f1a66 (patch) | |
tree | 5cf5678c870948e69ccb2ee3955d440aa2acaad9 | |
parent | fb1da6f2505664e3c5284f33f395755922ff5983 (diff) | |
download | syslinux-7c15367c10a7f086ef9523065299a982032f1a66.tar.gz |
core: thread: merge mbox_post() and mbox_trypost()
Merge mbox_post() and mbox_trypost() into a single function with a
timeout parameter.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r-- | core/include/mbox.h | 4 | ||||
-rw-r--r-- | core/thread/mbox.c | 17 |
2 files changed, 7 insertions, 14 deletions
diff --git a/core/include/mbox.h b/core/include/mbox.h index ac139ff5..0f38cb46 100644 --- a/core/include/mbox.h +++ b/core/include/mbox.h @@ -21,4 +21,8 @@ struct mailbox { void *data[]; /* Data array */ }; +void mbox_init(struct mailbox *mbox, size_t size); +int mbox_post(struct mailbox *mbox, void *msg, jiffies_t timeout); +jiffies_t mbox_fetch(struct mailbox *mbox, void **msg, jiffies_t timeout); + #endif /* _MBOX_H */ diff --git a/core/thread/mbox.c b/core/thread/mbox.c index 107b51bf..f880b47b 100644 --- a/core/thread/mbox.c +++ b/core/thread/mbox.c @@ -20,8 +20,10 @@ void mbox_init(struct mailbox *mbox, size_t size) mbox->tail = &mbox->data[0]; }; -static void mbox_post_common(struct mailbox *mbox, void *msg) +int mbox_post(struct mailbox *mbox, void *msg, jiffies_t timeout) { + if (sem_down(&mbox->prod_sem, timeout) == (jiffies_t)-1) + return ENOMEM; sem_down(&mbox->head_sem, 0); *mbox->head = msg; @@ -31,19 +33,6 @@ static void mbox_post_common(struct mailbox *mbox, void *msg) sem_up(&mbox->head_sem); sem_up(&mbox->cons_sem); -} - -void mbox_post(struct mailbox *mbox, void *msg) -{ - sem_down(&mbox->prod_sem, 0); - mbox_post_common(mbox, msg); -} - -int mbox_trypost(struct mailbox *mbox, void *msg) -{ - if (sem_down(&mbox->prod_sem, -1) == (jiffies_t)-1) - return ENOMEM; - mbox_post_common(mbox, msg); return 0; } |