From 632c9a2bd0ccd68cd70cbb8594678a7f9fa793c5 Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Sat, 26 Dec 2015 17:30:35 +0100 Subject: [PATCH 1/3] sema: harmonize sema_post return with rest of API --- sys/include/sema.h | 1 + sys/sema/sema.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/include/sema.h b/sys/include/sema.h index 360c4deb5b..b57e7b489b 100644 --- a/sys/include/sema.h +++ b/sys/include/sema.h @@ -133,6 +133,7 @@ static inline int sema_wait(sema_t *sema) * * @param[in] sema A semaphore. * + * @return 0, on success * @return -EINVAL, if semaphore is invalid. * @return -EOVERFLOW, if the semaphore's value would overflow. */ diff --git a/sys/sema/sema.c b/sys/sema/sema.c index b9ae892a97..00d701e574 100644 --- a/sys/sema/sema.c +++ b/sys/sema/sema.c @@ -169,7 +169,7 @@ int sema_post(sema_t *sema) restoreIRQ(old_state); } - return 1; + return 0; } /** @} */ From d5af07c759e54395ebb76497d958d2ffcf30c677 Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Sat, 26 Dec 2015 17:31:00 +0100 Subject: [PATCH 2/3] sema: style fixes --- sys/sema/sema.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sys/sema/sema.c b/sys/sema/sema.c index 00d701e574..aa46c5dda8 100644 --- a/sys/sema/sema.c +++ b/sys/sema/sema.c @@ -48,6 +48,7 @@ int sema_destroy(sema_t *sema) { unsigned int old_state; priority_queue_node_t *next; + if (sema == NULL) { return -EINVAL; } @@ -68,6 +69,7 @@ int sema_wait_timed_msg(sema_t *sema, uint64_t timeout, msg_t *msg) unsigned old_state; msg_t timeout_msg; xtimer_t timeout_timer; + if (sema == NULL) { return -EINVAL; } @@ -128,13 +130,13 @@ int sema_wait_timed_msg(sema_t *sema, uint64_t timeout, msg_t *msg) int sema_wait_timed(sema_t *sema, uint64_t timeout) { int result; + do { msg_t msg; result = sema_wait_timed_msg(sema, timeout, &msg); DEBUG("sema_wait: %" PRIkernel_pid ": Discarding message from %" PRIkernel_pid "\n", sched_active_thread->pid, msg->sender_pid); - } - while (result == -EAGAIN); + } while (result == -EAGAIN); return result; } @@ -142,6 +144,7 @@ int sema_post(sema_t *sema) { unsigned int old_state, value; priority_queue_node_t *next; + if (sema == NULL) { return -EINVAL; } From 96075ed2c1f2f7172a87f7d6a5a10697f0135b12 Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Fri, 25 Dec 2015 00:23:21 +0100 Subject: [PATCH 3/3] sema: introduce static initializer --- sys/include/sema.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sys/include/sema.h b/sys/include/sema.h index b57e7b489b..e6545ecf75 100644 --- a/sys/include/sema.h +++ b/sys/include/sema.h @@ -30,6 +30,15 @@ extern "C" { #endif +/** + * @brief Creates semaphore statically. + * + * @param[in] value Initial value for the semaphore. + * + * @return Statically initialized semaphore. + */ +#define SEMA_CREATE(value) { (value), PRIORITY_QUEUE_INIT } + /** * @brief A Semaphore. */ @@ -39,7 +48,7 @@ typedef struct { } sema_t; /** - * @brief Creates semaphore. + * @brief Creates semaphore dynamically. * * @see * The Open Group Base Specifications Issue 7, sem_init()