summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2014-03-13 06:54:10 +0000
committerdavidxu <davidxu@FreeBSD.org>2014-03-13 06:54:10 +0000
commit18f2ff55c55c58c0733e90b526031fc14b3f70a9 (patch)
treedfcefbe2795bcacb7151db6f861ef6db6e5871ec
parentab96e8ac8cdb48708521c366d4e23f99a92aa2d0 (diff)
downloadFreeBSD-src-18f2ff55c55c58c0733e90b526031fc14b3f70a9.zip
FreeBSD-src-18f2ff55c55c58c0733e90b526031fc14b3f70a9.tar.gz
To avoid missing a chance to cancel thread, call _pthread_testcancel at the
beginning of _sem_timedwait. Submitted by: Eric van Gyzen &lt; eric at vangyzen dot net &gt; MFC after: 3 days
-rw-r--r--lib/libc/gen/sem_new.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/lib/libc/gen/sem_new.c b/lib/libc/gen/sem_new.c
index 1bf84ea..9a2ab27 100644
--- a/lib/libc/gen/sem_new.c
+++ b/lib/libc/gen/sem_new.c
@@ -381,6 +381,7 @@ _sem_timedwait(sem_t * __restrict sem,
return (-1);
retval = 0;
+ _pthread_testcancel();
for (;;) {
while ((val = sem->_kern._count) > 0) {
if (atomic_cmpset_acq_int(&sem->_kern._count, val, val - 1))
OpenPOWER on IntegriCloud