From 7dd9ac6be0e8e24d4fec5d9bdbd2cab96ef597b5 Mon Sep 17 00:00:00 2001 From: Ludwig Ortmann Date: Fri, 5 Jul 2013 19:22:29 +0200 Subject: [PATCH 1/3] Add msg_try_receive --- core/include/msg.h | 10 ++++++++++ core/msg.c | 15 +++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/core/include/msg.h b/core/include/msg.h index c8770b7a8d..78db899b43 100644 --- a/core/include/msg.h +++ b/core/include/msg.h @@ -90,6 +90,16 @@ int msg_send_int(msg_t *m, unsigned int target_pid); */ int msg_receive(msg_t *m); +/** + * @brief Try to receive a message. + * + * This function does not block if no message can be received. + * @param m pointer to preallocated msg + * + * @return 1 if a message was received, -1 otherwise. + */ +int msg_try_receive(msg_t *m); + /** * @brief Send a message, block until reply received. * diff --git a/core/msg.c b/core/msg.c index 9e621027f9..0c494cc843 100644 --- a/core/msg.c +++ b/core/msg.c @@ -184,7 +184,17 @@ int msg_reply_int(msg_t *m, msg_t *reply) return 1; } +int msg_try_receive(msg_t *m) +{ + return _msg_receive(m, false); +} + int msg_receive(msg_t *m) +{ + return _msg_receive(m, true); +} + +int _msg_receive(msg_t *m, block) { dINT(); DEBUG("%s: msg_receive.\n", active_thread->name); @@ -197,6 +207,11 @@ int msg_receive(msg_t *m) n = cib_get(&(me->msg_queue)); } + /* no message, fail */ + if ((!block) && (n == -1)) { + return -1; + } + if (n >= 0) { DEBUG("%s: msg_receive(): We've got a queued message.\n", active_thread->name); *m = me->msg_array[n]; From 96cbf4019e7249346173f0cbdf51f3b9bbc3b42a Mon Sep 17 00:00:00 2001 From: Christian Mehlis Date: Fri, 5 Jul 2013 23:34:11 +0200 Subject: [PATCH 2/3] make internal function static --- core/msg.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/msg.c b/core/msg.c index 0c494cc843..de16b8a323 100644 --- a/core/msg.c +++ b/core/msg.c @@ -28,6 +28,9 @@ //#define ENABLE_DEBUG #include "debug.h" +static int _msg_receive(msg_t *m, int block); + + static int queue_msg(tcb_t *target, msg_t *m) { int n = cib_put(&(target->msg_queue)); @@ -194,7 +197,7 @@ int msg_receive(msg_t *m) return _msg_receive(m, true); } -int _msg_receive(msg_t *m, block) +static int _msg_receive(msg_t *m, block) { dINT(); DEBUG("%s: msg_receive.\n", active_thread->name); From 190e24116ded56275cc104ecbed01a9e9764011f Mon Sep 17 00:00:00 2001 From: Christian Mehlis Date: Tue, 9 Jul 2013 13:41:08 +0200 Subject: [PATCH 3/3] use int explicitly --- core/msg.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/msg.c b/core/msg.c index de16b8a323..52e6e1dc30 100644 --- a/core/msg.c +++ b/core/msg.c @@ -189,15 +189,15 @@ int msg_reply_int(msg_t *m, msg_t *reply) int msg_try_receive(msg_t *m) { - return _msg_receive(m, false); + return _msg_receive(m, 0); } int msg_receive(msg_t *m) { - return _msg_receive(m, true); + return _msg_receive(m, 1); } -static int _msg_receive(msg_t *m, block) +static int _msg_receive(msg_t *m, int block) { dINT(); DEBUG("%s: msg_receive.\n", active_thread->name);