From a7778dae226fbae335383bc92b6cdfccc5ea9f2e Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sun, 4 Sep 2011 21:37:07 -0400 Subject: 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. --- src/thread/pthread_setcanceltype.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/thread/pthread_setcanceltype.c b/src/thread/pthread_setcanceltype.c index 7eb543a8..ce2fff07 100644 --- a/src/thread/pthread_setcanceltype.c +++ b/src/thread/pthread_setcanceltype.c @@ -6,5 +6,6 @@ int pthread_setcanceltype(int new, int *old) if (new > 1U) return EINVAL; if (old) *old = self->cancelasync; self->cancelasync = new; + if (new) pthread_testcancel(); return 0; } -- cgit v1.2.1