diff options
Diffstat (limited to 'src/thread')
-rw-r--r-- | src/thread/pthread_join.c | 1 | ||||
-rw-r--r-- | src/thread/sem_timedwait.c | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/src/thread/pthread_join.c b/src/thread/pthread_join.c index 719c91ca..abd2d668 100644 --- a/src/thread/pthread_join.c +++ b/src/thread/pthread_join.c @@ -8,6 +8,7 @@ static void dummy(void *p) int pthread_join(pthread_t t, void **res) { int tmp; + pthread_testcancel(); while ((tmp = t->tid)) __timedwait(&t->tid, tmp, 0, 0, dummy, 0, 0); if (res) *res = t->result; if (t->map_base) munmap(t->map_base, t->map_size); diff --git a/src/thread/sem_timedwait.c b/src/thread/sem_timedwait.c index b5a60add..68dcb504 100644 --- a/src/thread/sem_timedwait.c +++ b/src/thread/sem_timedwait.c @@ -8,6 +8,8 @@ static void cleanup(void *p) int sem_timedwait(sem_t *restrict sem, const struct timespec *restrict at) { + pthread_testcancel(); + if (!sem_trywait(sem)) return 0; int spins = 100; |