diff options
| author | guo <[email protected]> | 2022-01-28 16:38:32 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-01-28 16:38:32 +0800 |
| commit | 580194f5f0f18371c08bb926a8fed7d7093cea67 (patch) | |
| tree | 17b0dac3ea40283f1b9268a56f3577c9d3e94d05 /src/ipc.c | |
| parent | cd929f04f680ea243810c988558c717c193740b8 (diff) | |
| parent | 500d26c2570bb3d905e38aed05fd9c9b324a8f6e (diff) | |
Merge pull request #4740 from Guozhanxin/scheduler_check
Diffstat (limited to 'src/ipc.c')
| -rwxr-xr-x | src/ipc.c | 31 |
1 files changed, 20 insertions, 11 deletions
@@ -485,6 +485,9 @@ rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t time) RT_ASSERT(sem != RT_NULL); RT_ASSERT(rt_object_get_type(&sem->parent.parent) == RT_Object_Class_Semaphore); + /* current context checking */ + RT_DEBUG_SCHEDULER_AVAILABLE(time != 0); + RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(sem->parent.parent))); /* disable interrupt */ @@ -514,9 +517,6 @@ rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t time) } else { - /* current context checking */ - RT_DEBUG_IN_THREAD_CONTEXT; - /* semaphore is unavailable, push to suspend list */ /* get current thread */ thread = rt_thread_self(); @@ -912,7 +912,8 @@ rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t time) struct rt_thread *thread; /* this function must not be used in interrupt even if time = 0 */ - RT_DEBUG_IN_THREAD_CONTEXT; + /* current context checking */ + RT_DEBUG_SCHEDULER_AVAILABLE(RT_TRUE); /* parameter check */ RT_ASSERT(mutex != RT_NULL); @@ -1566,12 +1567,13 @@ rt_err_t rt_event_recv(rt_event_t event, register rt_ubase_t level; register rt_base_t status; - RT_DEBUG_IN_THREAD_CONTEXT; - /* parameter check */ RT_ASSERT(event != RT_NULL); RT_ASSERT(rt_object_get_type(&event->parent.parent) == RT_Object_Class_Event); + /* current context checking */ + RT_DEBUG_SCHEDULER_AVAILABLE(RT_TRUE); + if (set == 0) return -RT_ERROR; @@ -1993,6 +1995,9 @@ rt_err_t rt_mb_send_wait(rt_mailbox_t mb, RT_ASSERT(mb != RT_NULL); RT_ASSERT(rt_object_get_type(&mb->parent.parent) == RT_Object_Class_MailBox); + /* current context checking */ + RT_DEBUG_SCHEDULER_AVAILABLE(timeout != 0); + /* initialize delta tick */ tick_delta = 0; /* get current thread */ @@ -2025,7 +2030,6 @@ rt_err_t rt_mb_send_wait(rt_mailbox_t mb, return -RT_EFULL; } - RT_DEBUG_IN_THREAD_CONTEXT; /* suspend current thread */ _ipc_list_suspend(&(mb->suspend_sender_thread), thread, @@ -2236,6 +2240,9 @@ rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout) RT_ASSERT(mb != RT_NULL); RT_ASSERT(rt_object_get_type(&mb->parent.parent) == RT_Object_Class_MailBox); + /* current context checking */ + RT_DEBUG_SCHEDULER_AVAILABLE(timeout != 0); + /* initialize delta tick */ tick_delta = 0; /* get current thread */ @@ -2271,7 +2278,6 @@ rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout) return -RT_ETIMEOUT; } - RT_DEBUG_IN_THREAD_CONTEXT; /* suspend current thread */ _ipc_list_suspend(&(mb->parent.suspend_thread), thread, @@ -2744,6 +2750,9 @@ rt_err_t rt_mq_send_wait(rt_mq_t mq, RT_ASSERT(buffer != RT_NULL); RT_ASSERT(size != 0); + /* current context checking */ + RT_DEBUG_SCHEDULER_AVAILABLE(timeout != 0); + /* greater than one message size */ if (size > mq->msg_size) return -RT_ERROR; @@ -2784,7 +2793,6 @@ rt_err_t rt_mq_send_wait(rt_mq_t mq, return -RT_EFULL; } - RT_DEBUG_IN_THREAD_CONTEXT; /* suspend current thread */ _ipc_list_suspend(&(mq->suspend_sender_thread), thread, @@ -3054,6 +3062,9 @@ rt_err_t rt_mq_recv(rt_mq_t mq, RT_ASSERT(buffer != RT_NULL); RT_ASSERT(size != 0); + /* current context checking */ + RT_DEBUG_SCHEDULER_AVAILABLE(timeout != 0); + /* initialize delta tick */ tick_delta = 0; /* get current thread */ @@ -3074,8 +3085,6 @@ rt_err_t rt_mq_recv(rt_mq_t mq, /* message queue is empty */ while (mq->entry == 0) { - RT_DEBUG_IN_THREAD_CONTEXT; - /* reset error number in thread */ thread->error = RT_EOK; |
