summaryrefslogtreecommitdiff
path: root/src/aio/aio_suspend.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/aio/aio_suspend.c')
-rw-r--r--src/aio/aio_suspend.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/aio/aio_suspend.c b/src/aio/aio_suspend.c
index dfa524bf..08fb5ddc 100644
--- a/src/aio/aio_suspend.c
+++ b/src/aio/aio_suspend.c
@@ -15,6 +15,8 @@ int aio_suspend(const struct aiocb *const cbs[], int cnt, const struct timespec
int nzcnt = 0;
const struct aiocb *cb = 0;
+ pthread_testcancel();
+
if (cnt<0) {
errno = EINVAL;
return -1;
@@ -61,10 +63,14 @@ int aio_suspend(const struct aiocb *const cbs[], int cnt, const struct timespec
break;
}
- ret = __timedwait(pfut, expect, CLOCK_MONOTONIC, ts?&at:0, 1);
+ ret = __timedwait_cp(pfut, expect, CLOCK_MONOTONIC, ts?&at:0, 1);
- if (ret) {
- errno = ret==ETIMEDOUT ? EAGAIN : ret;
+ switch (ret) {
+ case ETIMEDOUT:
+ ret = EAGAIN;
+ case ECANCELED:
+ case EINTR:
+ errno = ret;
return -1;
}
}