提交 4db9cfbe 编写于 作者: xiaozhao86's avatar xiaozhao86 提交者: guo

return thread error when resumed by signal

上级 3e59cfd7
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
* Date Author Notes * Date Author Notes
* 2018/06/26 Bernard Fix the wait queue issue when wakeup a soon * 2018/06/26 Bernard Fix the wait queue issue when wakeup a soon
* to blocked thread. * to blocked thread.
* 2022-01-24 THEWON let rt_wqueue_wait return thread->error when using signal
*/ */
#include <stdint.h> #include <stdint.h>
...@@ -141,6 +142,10 @@ int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec) ...@@ -141,6 +142,10 @@ int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec)
rt_list_init(&__wait.list); rt_list_init(&__wait.list);
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
/* reset thread error */
tid->error = RT_EOK;
if (queue->flag == RT_WQ_FLAG_WAKEUP) if (queue->flag == RT_WQ_FLAG_WAKEUP)
{ {
/* already wakeup */ /* already wakeup */
...@@ -171,5 +176,5 @@ __exit_wakeup: ...@@ -171,5 +176,5 @@ __exit_wakeup:
rt_wqueue_remove(&__wait); rt_wqueue_remove(&__wait);
return 0; return tid->error;
} }
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
* 2021-01-03 Meco Man implement rt_mb_urgent() * 2021-01-03 Meco Man implement rt_mb_urgent()
* 2021-05-30 Meco Man implement rt_mutex_trytake() * 2021-05-30 Meco Man implement rt_mutex_trytake()
* 2022-01-07 Gabriel Moving __on_rt_xxxxx_hook to ipc.c * 2022-01-07 Gabriel Moving __on_rt_xxxxx_hook to ipc.c
* 2022-01-24 THEWON let rt_mutex_take return thread->error when using signal
*/ */
#include <rtthread.h> #include <rtthread.h>
...@@ -947,9 +948,6 @@ rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t time) ...@@ -947,9 +948,6 @@ rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t time)
} }
else else
{ {
#ifdef RT_USING_SIGNALS
__again:
#endif /* RT_USING_SIGNALS */
/* The value of mutex is 1 in initial status. Therefore, if the /* The value of mutex is 1 in initial status. Therefore, if the
* value is great than 0, it indicates the mutex is avaible. * value is great than 0, it indicates the mutex is avaible.
*/ */
...@@ -1026,11 +1024,6 @@ __again: ...@@ -1026,11 +1024,6 @@ __again:
if (thread->error != RT_EOK) if (thread->error != RT_EOK)
{ {
#ifdef RT_USING_SIGNALS
/* interrupt by signal, try it again */
if (thread->error == -RT_EINTR) goto __again;
#endif /* RT_USING_SIGNALS */
/* return error */ /* return error */
return thread->error; return thread->error;
} }
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
* 2021-11-15 THEWON Remove duplicate work between idle and _thread_exit * 2021-11-15 THEWON Remove duplicate work between idle and _thread_exit
* 2021-12-27 Meco Man remove .init_priority * 2021-12-27 Meco Man remove .init_priority
* 2022-01-07 Gabriel Moving __on_rt_xxxxx_hook to thread.c * 2022-01-07 Gabriel Moving __on_rt_xxxxx_hook to thread.c
* 2022-01-24 THEWON let rt_thread_sleep return thread->error when using signal
*/ */
#include <rthw.h> #include <rthw.h>
...@@ -566,6 +567,9 @@ rt_err_t rt_thread_sleep(rt_tick_t tick) ...@@ -566,6 +567,9 @@ rt_err_t rt_thread_sleep(rt_tick_t tick)
/* disable interrupt */ /* disable interrupt */
temp = rt_hw_interrupt_disable(); temp = rt_hw_interrupt_disable();
/* reset thread error */
thread->error = RT_EOK;
/* suspend thread */ /* suspend thread */
rt_thread_suspend(thread); rt_thread_suspend(thread);
...@@ -582,7 +586,7 @@ rt_err_t rt_thread_sleep(rt_tick_t tick) ...@@ -582,7 +586,7 @@ rt_err_t rt_thread_sleep(rt_tick_t tick)
if (thread->error == -RT_ETIMEOUT) if (thread->error == -RT_ETIMEOUT)
thread->error = RT_EOK; thread->error = RT_EOK;
return RT_EOK; return thread->error;
} }
/** /**
...@@ -625,6 +629,9 @@ rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick) ...@@ -625,6 +629,9 @@ rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick)
/* disable interrupt */ /* disable interrupt */
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
/* reset thread error */
thread->error = RT_EOK;
cur_tick = rt_tick_get(); cur_tick = rt_tick_get();
if (cur_tick - *tick < inc_tick) if (cur_tick - *tick < inc_tick)
{ {
...@@ -657,7 +664,7 @@ rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick) ...@@ -657,7 +664,7 @@ rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick)
rt_hw_interrupt_enable(level); rt_hw_interrupt_enable(level);
} }
return RT_EOK; return thread->error;
} }
RTM_EXPORT(rt_thread_delay_until); RTM_EXPORT(rt_thread_delay_until);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册