diff options
Diffstat (limited to 'test/timeout.c')
-rw-r--r-- | test/timeout.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/test/timeout.c b/test/timeout.c index 641f4ac..00581e0 100644 --- a/test/timeout.c +++ b/test/timeout.c @@ -177,6 +177,57 @@ err: return 1; } +static int test_single_timeout_wait(struct io_uring *ring) +{ + struct io_uring_cqe *cqe; + struct io_uring_sqe *sqe; + struct timespec ts; + int i, ret; + + sqe = io_uring_get_sqe(ring); + io_uring_prep_nop(sqe); + io_uring_sqe_set_data(sqe, (void *) 1); + + sqe = io_uring_get_sqe(ring); + io_uring_prep_nop(sqe); + io_uring_sqe_set_data(sqe, (void *) 1); + + ret = io_uring_submit(ring); + if (ret <= 0) { + printf("sqe submit failed: %d\n", ret); + goto err; + } + + ts.tv_sec = 1; + ts.tv_nsec = 0; + + i = 0; + do { + ret = io_uring_wait_cqe_timeout(ring, &cqe, &ts); + if (ret == -ETIME) + break; + if (ret < 0) { + printf("wait timeout failed: %d\n", ret); + goto err; + } + + if (cqe->res < 0) { + printf("res: %d\n", cqe->res); + goto err; + } + io_uring_cqe_seen(ring, cqe); + i++; + } while (1); + + if (i != 2) { + printf("got %d completions\n", i); + goto err; + } + return 0; +err: + return 1; +} + /* * Test single timeout waking us up */ @@ -293,6 +344,12 @@ int main(int argc, char *argv[]) return ret; } + ret = test_single_timeout_wait(&ring); + if (ret) { + printf("test_single_timeout_wait failed\n"); + return ret; + } + /* * this test must go last, it kills the ring */ |