diff --git a/Ubiquitous/XiZi/kernel/thread/msgqueue.c b/Ubiquitous/XiZi/kernel/thread/msgqueue.c index 6a253dd8f..daec4c77a 100644 --- a/Ubiquitous/XiZi/kernel/thread/msgqueue.c +++ b/Ubiquitous/XiZi/kernel/thread/msgqueue.c @@ -96,7 +96,12 @@ static x_err_t _MsgQueueSend(struct MsgQueue *mq, tick_delta = 0; task = GetKTaskDescriptor(); - timeout = CalculteTickFromTimeMs(msec); + + if(WAITING_FOREVER == msec) + timeout = WAITING_FOREVER; + else + timeout = CalculteTickFromTimeMs(msec); + lock = CriticalAreaLock(); if (mq->num_msgs >= mq->max_msgs && timeout == 0) { CriticalAreaUnLock(lock); diff --git a/Ubiquitous/XiZi/kernel/thread/semaphore.c b/Ubiquitous/XiZi/kernel/thread/semaphore.c index 663e235c7..c26eca746 100644 --- a/Ubiquitous/XiZi/kernel/thread/semaphore.c +++ b/Ubiquitous/XiZi/kernel/thread/semaphore.c @@ -94,8 +94,12 @@ static int32 _SemaphoreObtain(struct Semaphore *sem, int32 msec) struct TaskDescriptor *task = NONE; NULL_PARAM_CHECK(sem); - - wait_time = CalculteTickFromTimeMs(msec); + + if(WAITING_FOREVER == msec) + wait_time = WAITING_FOREVER; + else + wait_time = CalculteTickFromTimeMs(msec); + lock = CriticalAreaLock(); SYS_KDEBUG_LOG(KDBG_IPC, ("obtain semaphore: id %d, value %d, by task %s\n",