summaryrefslogtreecommitdiff
path: root/src/thread.c
diff options
context:
space:
mode:
authoraozima <[email protected]>2020-10-09 15:17:27 +0800
committeraozima <[email protected]>2020-10-09 15:17:27 +0800
commit05777266b9dffe30df0bef15b35b710f6de21710 (patch)
tree6453a68327fd2d7ffb3dcbf788bd5f6d8b209528 /src/thread.c
parent79fd12842beeee5a653ba6f4bc2f08b21be7697a (diff)
parentaeff91b2a7fc846cf3724c01c28fbd7327bd2bac (diff)
Merge remote-tracking branch 'remotes/gitee/master' into gitee_master
Diffstat (limited to 'src/thread.c')
-rw-r--r--src/thread.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/thread.c b/src/thread.c
index 715596b132..7a90e57f25 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -478,7 +478,15 @@ RTM_EXPORT(rt_thread_delete);
*/
rt_err_t rt_thread_yield(void)
{
+ struct rt_thread *thread;
+ rt_base_t lock;
+
+ thread = rt_thread_self();
+ lock = rt_hw_interrupt_disable();
+ thread->remaining_tick = thread->init_tick;
+ thread->stat |= RT_THREAD_STAT_YIELD;
rt_schedule();
+ rt_hw_interrupt_enable(lock);
return RT_EOK;
}
@@ -679,9 +687,17 @@ rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg)
case RT_THREAD_CTRL_STARTUP:
return rt_thread_startup(thread);
-#ifdef RT_USING_HEAP
case RT_THREAD_CTRL_CLOSE:
- return rt_thread_delete(thread);
+
+ if (rt_object_is_systemobject((rt_object_t)thread) == RT_TRUE)
+ {
+ return rt_thread_detach(thread);
+ }
+#ifdef RT_USING_HEAP
+ else
+ {
+ return rt_thread_delete(thread);
+ }
#endif
#ifdef RT_USING_SMP