diff options
author | Jens Axboe <axboe@kernel.dk> | 2022-02-04 08:52:11 -0700 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2022-02-04 08:52:42 -0700 |
commit | 5bde26e4587168a439cabdbe73740454249e5204 (patch) | |
tree | 29553ab0b64d8207c83554806c438c39d803bebf | |
parent | 5efa7d07186177612a9da97b1a7cea2f4479f937 (diff) | |
download | liburing-5bde26e4587168a439cabdbe73740454249e5204.tar.gz liburing-5bde26e4587168a439cabdbe73740454249e5204.tar.bz2 |
test/eventfd-reg.c: add basic test case to exercise reg+unreg
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | test/Makefile | 1 | ||||
-rw-r--r-- | test/eventfd-reg.c | 76 |
3 files changed, 78 insertions, 0 deletions
@@ -48,6 +48,7 @@ /test/empty-eownerdead /test/eventfd /test/eventfd-disable +/test/eventfd-reg /test/eventfd-ring /test/exit-no-cleanup /test/fadvise diff --git a/test/Makefile b/test/Makefile index b74ba06..1e318f7 100644 --- a/test/Makefile +++ b/test/Makefile @@ -65,6 +65,7 @@ test_srcs := \ empty-eownerdead.c \ eventfd.c \ eventfd-disable.c \ + eventfd-reg.c \ eventfd-ring.c \ exec-target.c \ exit-no-cleanup.c \ diff --git a/test/eventfd-reg.c b/test/eventfd-reg.c new file mode 100644 index 0000000..c708a51 --- /dev/null +++ b/test/eventfd-reg.c @@ -0,0 +1,76 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Description: test eventfd registration+unregistration + * + */ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <sys/poll.h> +#include <sys/eventfd.h> + +#include "liburing.h" + +int main(int argc, char *argv[]) +{ + struct io_uring_params p = {}; + struct io_uring ring; + int ret, evfd[2], i; + + if (argc > 1) + return 0; + + ret = io_uring_queue_init_params(8, &ring, &p); + if (ret) { + fprintf(stderr, "ring setup failed: %d\n", ret); + return 1; + } + + evfd[0] = eventfd(0, EFD_CLOEXEC); + evfd[1] = eventfd(0, EFD_CLOEXEC); + if (evfd[0] < 0 || evfd[1] < 0) { + perror("eventfd"); + return 1; + } + + ret = io_uring_register_eventfd(&ring, evfd[0]); + if (ret) { + fprintf(stderr, "failed to register evfd: %d\n", ret); + return 1; + } + + /* Check that registrering again will get -EBUSY */ + ret = io_uring_register_eventfd(&ring, evfd[1]); + if (ret != -EBUSY) { + fprintf(stderr, "unexpected 2nd register: %d\n", ret); + return 1; + } + close(evfd[1]); + + ret = io_uring_unregister_eventfd(&ring); + if (ret) { + fprintf(stderr, "unexpected unregister: %d\n", ret); + return 1; + } + + /* loop 100 registers/unregister */ + for (i = 0; i < 100; i++) { + ret = io_uring_register_eventfd(&ring, evfd[0]); + if (ret) { + fprintf(stderr, "failed to register evfd: %d\n", ret); + return 1; + } + + ret = io_uring_unregister_eventfd(&ring); + if (ret) { + fprintf(stderr, "unexpected unregister: %d\n", ret); + return 1; + } + } + + close(evfd[0]); + return 0; +} |