diff options
author | Rich Felker <dalias@aerifal.cx> | 2014-04-15 20:42:39 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2014-04-15 20:42:39 -0400 |
commit | 0d0c2f40344640a2a6942dda156509593f51db5d (patch) | |
tree | baf15b9f4105f040e47e10b9bdaa56ad8e7c7fc5 /crt | |
parent | fcea534e579077e10456f6ed06c033dfaa013a24 (diff) | |
download | musl-0d0c2f40344640a2a6942dda156509593f51db5d.tar.gz musl-0d0c2f40344640a2a6942dda156509593f51db5d.tar.xz musl-0d0c2f40344640a2a6942dda156509593f51db5d.zip |
fix deadlock race in pthread_once
at the end of successful pthread_once, there was a race window during which another thread calling pthread_once would momentarily change the state back from 2 (finished) to 1 (in-progress). in this case, the status was immediately changed back, but with no wake call, meaning that waiters which arrived during this short window could block forever. there are two possible fixes. one would be adding the wake to the code path where it was missing. but it's better just to avoid reverting the status at all, by using compare-and-swap instead of swap.
Diffstat (limited to 'crt')
0 files changed, 0 insertions, 0 deletions