Fix race condition in pthread_create()
Save thread id to *thread_out before new
thread is allowed to run else there's a
risk that the thread has finished and
been deleted when *thread_out is assigned.
Change-Id: I6b84c61a8df06840877d4ab036f26feace3192d8
diff --git a/libc/bionic/pthread.c b/libc/bionic/pthread.c
index 2e2c09d..40a09ba 100644
--- a/libc/bionic/pthread.c
+++ b/libc/bionic/pthread.c
@@ -364,10 +364,10 @@
_thread_created_hook(tid);
pthread_mutex_unlock(&gDebuggerNotificationLock);
- // Let the thread run.
+ // Publish the pthread_t and let the thread run.
+ *thread_out = (pthread_t) thread;
pthread_mutex_unlock(start_mutex);
- *thread_out = (pthread_t) thread;
return 0;
}