X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Faio%2Faio_suspend.c;h=08fb5ddcf1a7b1450fb7446d9e8be202eaa1f42a;hb=768b82c6de24e480267c4c251c440edfc71800e3;hp=dfa524bfaa922d2a61ecef3a27700afc775b50af;hpb=0fc317d83c1167393bf276a8bfbdd9a4e02e8258;p=musl 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; } }