diff options
Diffstat (limited to 'lib/libthr/thread/thr_sig.c')
-rw-r--r-- | lib/libthr/thread/thr_sig.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/libthr/thread/thr_sig.c b/lib/libthr/thread/thr_sig.c index 0924646..335fa09 100644 --- a/lib/libthr/thread/thr_sig.c +++ b/lib/libthr/thread/thr_sig.c @@ -50,8 +50,6 @@ sigcancel_handler(int sig, siginfo_t *info, ucontext_t *ucp) { struct pthread *curthread = _get_curthread(); - if (curthread->cancelflags & THR_CANCEL_AT_POINT) - pthread_testcancel(); _thr_ast(curthread); } @@ -59,6 +57,9 @@ void _thr_ast(struct pthread *curthread) { if (!THR_IN_CRITICAL(curthread)) { + if (__predict_false(curthread->cancelflags & + THR_CANCEL_AT_POINT)) + _pthread_testcancel(); if (__predict_false((curthread->flags & (THR_FLAGS_NEED_SUSPEND | THR_FLAGS_SUSPENDED)) == THR_FLAGS_NEED_SUSPEND)) |