summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorShell <[email protected]>2024-05-01 12:49:09 +0800
committerGitHub <[email protected]>2024-05-01 00:49:09 -0400
commit2c9b7c10b9ff6b4509945376bb4e25dd18c1ce25 (patch)
treea9f46cdbace47c261839a6d8ad040c5bd93659cd /components
parentbf669dd02c0370b57445609781217cd51d256c05 (diff)
[kernel] add rt_thread_close()
* [thread] Add rt_thread_close() This patch introduces a new function `rt_thread_close()` to enhances the usability and maintainability by providing a dedicated mechanism for closing threads. - A new function `rt_thread_close()` is added to the API, providing a standardized approach for closing threads. - The `rt_thread_close()` function removes a thread from the thread queue, updates its status to indicate closure, and performs the thread timer detaching which is a embedded timer in thread object. - Additionally, the `rt_thread_detach()` function is modified to utilize `rt_thread_close()` internally, streamlining the thread detachment process. Signed-off-by: Shell <[email protected]>
Diffstat (limited to 'components')
-rw-r--r--components/libc/posix/libdl/dlmodule.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/components/libc/posix/libdl/dlmodule.c b/components/libc/posix/libdl/dlmodule.c
index 1f245e4121..2679296731 100644
--- a/components/libc/posix/libdl/dlmodule.c
+++ b/components/libc/posix/libdl/dlmodule.c
@@ -202,18 +202,10 @@ void dlmodule_destroy_subthread(struct rt_dlmodule *module, rt_thread_t thread)
/* lock scheduler to prevent scheduling in cleanup function. */
rt_enter_critical();
- /* remove thread from thread_list (ready or defunct thread list) */
- rt_list_remove(&RT_THREAD_LIST_NODE(thread));
+ rt_thread_close(thread);
- if ((thread->stat & RT_THREAD_STAT_MASK) != RT_THREAD_CLOSE &&
- (thread->thread_timer.parent.type == (RT_Object_Class_Static | RT_Object_Class_Timer)))
- {
- /* release thread timer */
- rt_timer_detach(&(thread->thread_timer));
- }
-
- /* change stat */
- thread->stat = RT_THREAD_CLOSE;
+ /* remove thread from thread_list (defunct thread list) */
+ rt_list_remove(&RT_THREAD_LIST_NODE(thread));
/* invoke thread cleanup */
if (thread->cleanup != RT_NULL)