return thread error when resumed by signal
This commit is contained in:
parent
3e59cfd70e
commit
4db9cfbebe
|
@ -7,6 +7,7 @@
|
|||
* Date Author Notes
|
||||
* 2018/06/26 Bernard Fix the wait queue issue when wakeup a soon
|
||||
* to blocked thread.
|
||||
* 2022-01-24 THEWON let rt_wqueue_wait return thread->error when using signal
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
@ -141,6 +142,10 @@ int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec)
|
|||
rt_list_init(&__wait.list);
|
||||
|
||||
level = rt_hw_interrupt_disable();
|
||||
|
||||
/* reset thread error */
|
||||
tid->error = RT_EOK;
|
||||
|
||||
if (queue->flag == RT_WQ_FLAG_WAKEUP)
|
||||
{
|
||||
/* already wakeup */
|
||||
|
@ -171,5 +176,5 @@ __exit_wakeup:
|
|||
|
||||
rt_wqueue_remove(&__wait);
|
||||
|
||||
return 0;
|
||||
return tid->error;
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
* 2021-01-03 Meco Man implement rt_mb_urgent()
|
||||
* 2021-05-30 Meco Man implement rt_mutex_trytake()
|
||||
* 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>
|
||||
|
@ -947,9 +948,6 @@ rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t time)
|
|||
}
|
||||
else
|
||||
{
|
||||
#ifdef RT_USING_SIGNALS
|
||||
__again:
|
||||
#endif /* RT_USING_SIGNALS */
|
||||
/* The value of mutex is 1 in initial status. Therefore, if the
|
||||
* value is great than 0, it indicates the mutex is avaible.
|
||||
*/
|
||||
|
@ -1026,11 +1024,6 @@ __again:
|
|||
|
||||
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 thread->error;
|
||||
}
|
||||
|
|
11
src/thread.c
11
src/thread.c
|
@ -30,6 +30,7 @@
|
|||
* 2021-11-15 THEWON Remove duplicate work between idle and _thread_exit
|
||||
* 2021-12-27 Meco Man remove .init_priority
|
||||
* 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>
|
||||
|
@ -566,6 +567,9 @@ rt_err_t rt_thread_sleep(rt_tick_t tick)
|
|||
/* disable interrupt */
|
||||
temp = rt_hw_interrupt_disable();
|
||||
|
||||
/* reset thread error */
|
||||
thread->error = RT_EOK;
|
||||
|
||||
/* suspend thread */
|
||||
rt_thread_suspend(thread);
|
||||
|
||||
|
@ -582,7 +586,7 @@ rt_err_t rt_thread_sleep(rt_tick_t tick)
|
|||
if (thread->error == -RT_ETIMEOUT)
|
||||
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)
|
|||
/* disable interrupt */
|
||||
level = rt_hw_interrupt_disable();
|
||||
|
||||
/* reset thread error */
|
||||
thread->error = RT_EOK;
|
||||
|
||||
cur_tick = rt_tick_get();
|
||||
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)
|
|||
rt_hw_interrupt_enable(level);
|
||||
}
|
||||
|
||||
return RT_EOK;
|
||||
return thread->error;
|
||||
}
|
||||
RTM_EXPORT(rt_thread_delay_until);
|
||||
|
||||
|
|
Loading…
Reference in New Issue