From: Rich Felker Date: Mon, 5 Sep 2011 01:37:07 +0000 (-0400) Subject: handle pending cancellation when enabling async cancellation X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=a7778dae226fbae335383bc92b6cdfccc5ea9f2e;p=musl 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. --- 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; }