mirror of
git://git.musl-libc.org/musl
synced 2025-03-06 20:48:29 +01:00
make aio_suspend a cancellation point and properly handle cancellation
This commit is contained in:
parent
0fc317d83c
commit
5451d95715
1 changed files with 9 additions and 3 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue