|
@@ -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;
|
|
|
}
|
|
|
}
|