df30a1f8d3
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 | ||
Make.defs | ||
pthread_barrierwait.c | ||
pthread_cancel.c | ||
pthread_completejoin.c | ||
pthread_condbroadcast.c | ||
pthread_condclockwait.c | ||
pthread_condsignal.c | ||
pthread_condwait.c | ||
pthread_create.c | ||
pthread_detach.c | ||
pthread_exit.c | ||
pthread_findjoininfo.c | ||
pthread_getaffinity.c | ||
pthread_getschedparam.c | ||
pthread_initialize.c | ||
pthread_join.c | ||
pthread_mutex.c | ||
pthread_mutexconsistent.c | ||
pthread_mutexdestroy.c | ||
pthread_mutexinconsistent.c | ||
pthread_mutexinit.c | ||
pthread_mutextimedlock.c | ||
pthread_mutextrylock.c | ||
pthread_mutexunlock.c | ||
pthread_release.c | ||
pthread_setaffinity.c | ||
pthread_setschedparam.c | ||
pthread_setschedprio.c | ||
pthread_sigmask.c | ||
pthread.h |