From e9e8e3f3cafbbd1287e4226b93b9ad5d40f211e3 Mon Sep 17 00:00:00 2001 From: Grissiom Date: Wed, 18 Dec 2013 20:52:55 +0800 Subject: [PATCH] TC: do not use rt_sem_trytake to clean the sem There can be a race condition that the sem has alread been detached after we did the cleanup. Besides, there is a RT_IPC_CMD_RESET command in rt_sem_control which is more clear in setting the sem values. --- examples/kernel/tc_comm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/kernel/tc_comm.c b/examples/kernel/tc_comm.c index 60d843171f..bf23d80550 100644 --- a/examples/kernel/tc_comm.c +++ b/examples/kernel/tc_comm.c @@ -40,6 +40,8 @@ void tc_thread_entry(void* parameter) tick = index->func(); if (tick > 0) { + /* Make sure we are going to be blocked. */ + rt_sem_control(&_tc_sem, RT_IPC_CMD_RESET, 0); rt_sem_take(&_tc_sem, tick * _tc_scale); if (_tc_cleanup != RT_NULL) @@ -49,8 +51,6 @@ void tc_thread_entry(void* parameter) _tc_cleanup = RT_NULL; } - rt_sem_trytake(&_tc_sem);/* by nl1031 */ - if (_tc_stat & TC_STAT_FAILED) rt_kprintf("TestCase[%s] failed\n", _tc_current); else