diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-07-07 05:02:37 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-07-07 05:02:37 +0000 |
commit | 71927bc101a1c2e7360022c2a056f49106b722ea (patch) | |
tree | ebe9c872e416346e4b333e5062da32401c8e0a73 /test/eventfd-reg.c | |
parent | d53db6851ea17b2d219d084e1afc683b8b62b105 (diff) | |
parent | 1d27ff1934c5c4292dc00fba7f7f8ae411ed42f5 (diff) | |
download | liburing-71927bc101a1c2e7360022c2a056f49106b722ea.tar.gz |
Snap for 10453563 from 1d27ff1934c5c4292dc00fba7f7f8ae411ed42f5 to mainline-os-statsd-releaseaml_sta_341710000aml_sta_341615000aml_sta_341511040aml_sta_341410000aml_sta_341311010aml_sta_341114000aml_sta_341111000aml_sta_341010020aml_sta_340912000aml_sta_340911000aml_net_341111030android14-mainline-os-statsd-release
Change-Id: I92aad81dca3afa0dc7b00b53365472f7f29e4b40
Diffstat (limited to 'test/eventfd-reg.c')
-rw-r--r-- | test/eventfd-reg.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/test/eventfd-reg.c b/test/eventfd-reg.c new file mode 100644 index 0000000..b447455 --- /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 <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; +} |