author | Rich Felker <dalias@aerifal.cx> | 2014年09月05日 03:22:52 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2014年09月05日 03:22:52 -0400 |
commit | fff546930347d99729f1c0a9d911e7f24a094531 (patch) | |
tree | 59c0bf452ec99eff7f8cc1d477999633af28705f /src | |
parent | 80e6485455a9c75c029d0e976d2dd9c8e441dd72 (diff) | |
download | musl-fff546930347d99729f1c0a9d911e7f24a094531.tar.gz |
-rw-r--r-- | src/thread/pthread_join.c | 1 | ||||
-rw-r--r-- | src/thread/sem_timedwait.c | 2 |
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; |