mirror of
git://git.musl-libc.org/musl
synced 2025-03-04 10:47:32 +00:00
make non-waiting paths of sem_[timed]wait and pthread_join cancelable
per POSIX these functions are both cancellation points, so they must act on any cancellation request which is pending prior to the call. previously, only the code path where actual waiting took place could act on cancellation.
This commit is contained in:
parent
80e6485455
commit
fff5469303
@ -8,6 +8,7 @@ static void dummy(void *p)
|
||||
int pthread_join(pthread_t t, void **res)
|
||||
{
|
||||
int tmp;
|
||||
pthread_testcancel();
|
||||
while ((tmp = t->tid)) __timedwait(&t->tid, tmp, 0, 0, dummy, 0, 0);
|
||||
if (res) *res = t->result;
|
||||
if (t->map_base) munmap(t->map_base, t->map_size);
|
||||
|
@ -8,6 +8,8 @@ static void cleanup(void *p)
|
||||
|
||||
int sem_timedwait(sem_t *restrict sem, const struct timespec *restrict at)
|
||||
{
|
||||
pthread_testcancel();
|
||||
|
||||
if (!sem_trywait(sem)) return 0;
|
||||
|
||||
int spins = 100;
|
||||
|
Loading…
Reference in New Issue
Block a user