fix read-after-free type error in pthread_detach
authorRich Felker <dalias@aerifal.cx>
Sat, 14 Oct 2017 03:00:34 +0000 (23:00 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 14 Oct 2017 03:00:34 +0000 (23:00 -0400)
commitc1e27367a9b26b9baac0f37a12349fc36567c8b6
tree88accade820f5d320b504b517b043b951fec583e
parent907476925fca05f24ebca5fcdc21f1e58ba7b313
fix read-after-free type error in pthread_detach

calling __unlock on t->exitlock is not valid because __unlock reads
the waiters count after making the atomic store that could allow
pthread_exit to continue and unmap the thread's stack and the object t
points to. for now, inline the __unlock logic with an unconditional
futex wake operation so that the waiters count is not needed.

once __lock/__unlock have been made safe for self-synchronized
destruction, we could switch back to using them.
src/thread/pthread_detach.c