diff --git a/examples/utest/testcases/kernel/messagequeue_tc.c b/examples/utest/testcases/kernel/messagequeue_tc.c index 08d404987536..6d44c0042b71 100644 --- a/examples/utest/testcases/kernel/messagequeue_tc.c +++ b/examples/utest/testcases/kernel/messagequeue_tc.c @@ -82,6 +82,25 @@ static void mq_send_case(rt_mq_t testmq) rt_thread_delay(100); } +#ifdef RT_USING_MESSAGEQUEUE_PRIORITY + ret = rt_mq_send_wait_prio(testmq, &send_buf[3], sizeof(send_buf[0]), 3, 0, RT_UNINTERRUPTIBLE); + uassert_true(ret == RT_EOK); + ret = rt_mq_send_wait_prio(testmq, &send_buf[0], sizeof(send_buf[0]), 0, 0, RT_UNINTERRUPTIBLE); + uassert_true(ret == RT_EOK); + + ret = rt_mq_send_wait_prio(testmq, &send_buf[2], sizeof(send_buf[0]), 1, 0, RT_UNINTERRUPTIBLE); + uassert_true(ret == RT_EOK); + ret = rt_mq_send_wait_prio(testmq, &send_buf[4], sizeof(send_buf[0]), 4, 0, RT_UNINTERRUPTIBLE); + uassert_true(ret == RT_EOK); + ret = rt_mq_send_wait_prio(testmq, &send_buf[1], sizeof(send_buf[0]), 1, 0, RT_UNINTERRUPTIBLE); + uassert_true(ret == RT_EOK); + + while (testmq->entry != 0) + { + rt_thread_delay(100); + } +#endif + ret = rt_mq_send(testmq, &send_buf[1], sizeof(send_buf[0])); uassert_true(ret == RT_EOK); ret = rt_mq_control(testmq, RT_IPC_CMD_RESET, RT_NULL); @@ -121,6 +140,20 @@ static void mq_recv_case(rt_mq_t testmq) uassert_true(ret >= 0); uassert_true(recv_buf[var] == (var + 1)); } +#ifdef RT_USING_MESSAGEQUEUE_PRIORITY + rt_int32_t msg_prio; + while (testmq->entry == MAX_MSGS) + { + rt_thread_delay(100); + } + for (int var = 0; var < MAX_MSGS; ++var) + { + ret = rt_mq_recv_prio(testmq, &recv_buf[var], sizeof(recv_buf[0]), &msg_prio, RT_WAITING_FOREVER, RT_UNINTERRUPTIBLE); + rt_kprintf("msg_prio = %d\r\n", msg_prio); + uassert_true(ret >= 0); + uassert_true(recv_buf[var] == (MAX_MSGS - var)); + } +#endif } static void mq_recv_entry(void *param) diff --git a/src/ipc.c b/src/ipc.c index 04656ffdbc3b..f415bfc7b4a9 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -3310,15 +3310,15 @@ static rt_err_t _rt_mq_send_wait(rt_mq_t mq, if (mq->msg_queue_head == RT_NULL) mq->msg_queue_head = msg; - struct rt_mq_message *node, *prevNode = RT_NULL; + struct rt_mq_message *node, *prev_node = RT_NULL; for (node = mq->msg_queue_head; node != RT_NULL; node = node->next) { if (node->prio < msg->prio) { - if (prevNode == RT_NULL) + if (prev_node == RT_NULL) mq->msg_queue_head = msg; else - prevNode->next = msg; + prev_node->next = msg; msg->next = node; break; } @@ -3329,7 +3329,7 @@ static rt_err_t _rt_mq_send_wait(rt_mq_t mq, mq->msg_queue_tail = msg; break; } - prevNode = node; + prev_node = node; } #else /* link msg to message queue */