mirror of
https://github.com/apache/nuttx.git
synced 2026-09-08 01:46:35 +00:00
1. add support to join main task
| static pthread_t self;
|
| static void *join_task(void *arg)
| {
| int ret;
| ret = pthread_join(self, NULL); <--- /* Fix Task could not be joined */
| return NULL;
| }
|
| int main(int argc, char *argv[])
| {
| pthread_t thread;
|
| self = pthread_self();
|
| pthread_create(&thread, NULL, join_task, NULL);
| sleep(1);
|
| pthread_exit(NULL);
| return 0;
| }
2. Detach active thread will not alloc for additional join, just update the task flag.
3. Remove the return value waiting lock logic (data_sem),
the return value will be stored in the waiting tcb.
4. Revise the return value of pthread_join(), consistent with linux
e.g:
Joining a detached and canceled thread should return EINVAL, not ESRCH
https://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_join.html
[EINVAL]
The value specified by thread does not refer to a joinable thread.
NOTE:
This PR will not increase stack usage, but struct tcb_s will increase 32 bytes.
Signed-off-by: chao an <anchao@lixiang.com>
|
||
|---|---|---|
| .. | ||
| CMakeLists.txt | ||
| group.h | ||
| group_argvstr.c | ||
| group_childstatus.c | ||
| group_continue.c | ||
| group_create.c | ||
| group_exitinfo.c | ||
| group_foreachchild.c | ||
| group_free.c | ||
| group_getegid.c | ||
| group_geteuid.c | ||
| group_getgid.c | ||
| group_getuid.c | ||
| group_join.c | ||
| group_killchildren.c | ||
| group_leave.c | ||
| group_malloc.c | ||
| group_realloc.c | ||
| group_setegid.c | ||
| group_seteuid.c | ||
| group_setgid.c | ||
| group_setuid.c | ||
| group_setupidlefiles.c | ||
| group_setuptaskfiles.c | ||
| group_signal.c | ||
| group_suspendchildren.c | ||
| group_waiter.c | ||
| group_zalloc.c | ||
| Make.defs | ||