about summary refs log tree commit diff
path: root/src/thread/pthread_create.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2018-08-16 12:16:36 -0400
committerRich Felker <dalias@aerifal.cx>2018-08-16 12:16:36 -0400
commit91e1e29d6dd92c5e707f05dcc9b2a376b0d8dfa1 (patch)
tree537747c90415e28e9edb367190a156ea135fa752 /src/thread/pthread_create.c
parent1ad8138819ced49851e618c9c063aa0ffc86718c (diff)
downloadmusl-91e1e29d6dd92c5e707f05dcc9b2a376b0d8dfa1.tar.gz
musl-91e1e29d6dd92c5e707f05dcc9b2a376b0d8dfa1.tar.xz
musl-91e1e29d6dd92c5e707f05dcc9b2a376b0d8dfa1.zip
fix pthread_create return value with PTHREAD_EXPLICIT_SCHED
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.
Diffstat (limited to 'src/thread/pthread_create.c')
-rw-r--r--src/thread/pthread_create.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c
index 2df2e9f9..27ace2c6 100644
--- a/src/thread/pthread_create.c
+++ b/src/thread/pthread_create.c
@@ -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;
 	}