fix pthread_create return value with PTHREAD_EXPLICIT_SCHED
authorRich Felker <dalias@aerifal.cx>
Thu, 16 Aug 2018 16:16:36 +0000 (12:16 -0400)
committerRich Felker <dalias@aerifal.cx>
Thu, 16 Aug 2018 16:16:36 +0000 (12:16 -0400)
due to moved code, commit b8742f32602add243ee2ce74d804015463726899
inadvertently used the return value of __clone, rather than the return
value of SYS_sched_setscheduler in the new thread, to check whether it
needed to report failure. since a successful __clone returns the tid
of the new thread, which is never zero, this caused pthread_create
always to return with an invalid error number in the code path for
PTHREAD_EXPLICIT_SCHED.

this regression was not present in any releases.

src/thread/pthread_create.c

index 2df2e9f9d63663a8bf1589c0ddace0f7eb04753d..27ace2c662c522df573823e7ecdfe2d0aeae2ce4 100644 (file)
@@ -306,6 +306,7 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att
 
        if (do_sched) {
                __futexwait(&ssa.futex, -1, 1);
+               ret = ssa.futex;
                if (ret) return ret;
        }