Hi, I would like to ask a question about the implementation of pthread_create and start (musl v1.2.5) My question is as follows, here is the code: ----------------- int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict attrp, void *(*entry)(void *), void *restrict arg) ... if (ret < 0) { ret = -EAGAIN; } else if (attr._a_sched) { ret = __syscall(SYS_sched_setscheduler, new->tid, attr._a_policy, &attr._a_prio); if (a_swap(&args->control, ret ? 3 : 0) == 2) <- line 1 __wake(&args->control, 1, 1); <- line 2 if (ret) __wait(&args->control, 0, 3, 0); <- line 3 } ... ----------------- static int start(void *p) ... struct start_args *args = p; int state = args->control; if (state) { if (a_cas(&args->control, 1, 2) == 1) <- line 4 __wait(&args->control, 0, 2, 1); <- line 5 if (args->control) { __syscall(SYS_set_tid_address, &args->control); <- line 6 for (;;) __syscall(SYS_exit, 0); <- line 7 } } __syscall(SYS_rt_sigprocmask, SIG_SETMASK, &args->sig_mask, 0, _NSIG/8); ... ----------------- I think the calling route should be like this: 1.line 4(child thread) 2.line 5(child thread wait) 3.line 1(parent thread if SYS_sched_setscheduler false) 4.line 2(parent thread wake child thread) 5.line 3(parent thread wait if SYS_sched_setscheduler false) <- Problem point 6.line 6(child thread) 7.line 6(child thread exit) My question is, if SYS_sched_setscheduler returns an error (a non-zero value), the parent thread will remain in a wait state and I have not found a way to wake it, which will cause the parent thread to remain stuck in the pthread_create function and unable to return 1.Is my analysis process correct? 2.Is the situation where the parent thread gets stuck in the waite as expected?