1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

Merge pull request #4884 from kaspar030/fix_msg_try_receive

core: msg: fix msg_try_receive()
This commit is contained in:
Oleg Hahm 2016-02-25 18:17:54 +01:00
commit 94c287c4c2
3 changed files with 62 additions and 1 deletions

View File

@ -298,7 +298,7 @@ static int _msg_receive(msg_t *m, int block)
}
/* no message, fail */
if ((!block) && (queue_index == -1)) {
if ((!block) && ((!me->msg_waiters.first) && (queue_index == -1))) {
restoreIRQ(state);
return -1;
}

View File

@ -0,0 +1,4 @@
APPLICATION = msg_try_receive
include ../Makefile.tests_common
include $(RIOTBASE)/Makefile.include

View File

@ -0,0 +1,57 @@
/*
* Copyright (C) 2016 Kaspar Schleiser <kaspar@schleiser.de>
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup tests
* @{
*
* @file
* @brief msg_try_receive regression test application
*
* @author Kaspar Schleiser <kaspar@schleiser.de>
*
* @}
*/
#include <stdio.h>
#include "thread.h"
#include "msg.h"
static kernel_pid_t _main_pid;
static char stack[THREAD_STACKSIZE_MAIN];
static void *second_thread(void *arg)
{
(void) arg;
msg_t test;
puts("sending message...");
msg_send(&test, _main_pid);
return NULL;
}
int main(void)
{
printf("main starting\n");
_main_pid = thread_getpid();
thread_create(stack,
sizeof(stack),
THREAD_PRIORITY_MAIN - 1,
0,
second_thread,
NULL,
"second_thread");
msg_t m;
printf("msg available: %i (should be 1!)\n", msg_try_receive(&m));
return 0;
}