diff options
| author | Shell <[email protected]> | 2024-05-01 12:49:09 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-05-01 00:49:09 -0400 |
| commit | 2c9b7c10b9ff6b4509945376bb4e25dd18c1ce25 (patch) | |
| tree | a9f46cdbace47c261839a6d8ad040c5bd93659cd /components | |
| parent | bf669dd02c0370b57445609781217cd51d256c05 (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.c | 14 |
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) |
