mirror of
https://github.com/fluencelabs/musl
synced 2025-06-25 12:42:02 +00:00
handle pending cancellation when enabling async cancellation
this is not strictly required by the standard, but without it, there is a race condition where cancellation arriving just before async cancellation is enabled might not be acted upon. it is impossible for a conforming application to work around this race condition since calling pthread_testcancel after setting async cancellation mode is not allowed (pthread_testcancel is not specified to be async-cancel-safe). thus the implementation should be responsible for eliminating the race, from a quality-of-implementation standpoint.
This commit is contained in:
@ -6,5 +6,6 @@ int pthread_setcanceltype(int new, int *old)
|
|||||||
if (new > 1U) return EINVAL;
|
if (new > 1U) return EINVAL;
|
||||||
if (old) *old = self->cancelasync;
|
if (old) *old = self->cancelasync;
|
||||||
self->cancelasync = new;
|
self->cancelasync = new;
|
||||||
|
if (new) pthread_testcancel();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user