diff options
Diffstat (limited to 'test/thread-exit.c')
-rw-r--r-- | test/thread-exit.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/test/thread-exit.c b/test/thread-exit.c index c2f2148..3e20431 100644 --- a/test/thread-exit.c +++ b/test/thread-exit.c @@ -11,7 +11,7 @@ #include <stdlib.h> #include <string.h> #include <fcntl.h> -#include <sys/poll.h> +#include <poll.h> #include <pthread.h> #include "helpers.h" @@ -26,8 +26,18 @@ struct d { unsigned long off; int pipe_fd; int err; + int i; }; +static char *g_buf[NR_IOS] = {NULL}; + +static void free_g_buf(void) +{ + int i; + for (i = 0; i < NR_IOS; i++) + free(g_buf[i]); +} + static void *do_io(void *data) { struct d *d = data; @@ -36,6 +46,7 @@ static void *do_io(void *data) int ret; buffer = t_malloc(WSIZE); + g_buf[d->i] = buffer; memset(buffer, 0x5a, WSIZE); sqe = io_uring_get_sqe(d->ring); if (!sqe) { @@ -55,8 +66,6 @@ static void *do_io(void *data) ret = io_uring_submit(d->ring); if (ret != 2) d->err++; - - free(buffer); return NULL; } @@ -86,12 +95,12 @@ int main(int argc, char *argv[]) } else { fname = ".thread.exit"; do_unlink = 1; - } - - if (do_unlink) t_create_file(fname, 4096); + } fd = open(fname, O_WRONLY); + if (do_unlink) + unlink(fname); if (fd < 0) { perror("open"); return 1; @@ -103,6 +112,7 @@ int main(int argc, char *argv[]) d.pipe_fd = fds[0]; d.err = 0; for (i = 0; i < NR_IOS; i++) { + d.i = i; memset(&thread, 0, sizeof(thread)); pthread_create(&thread, NULL, do_io, &d); pthread_join(thread, NULL); @@ -125,11 +135,9 @@ int main(int argc, char *argv[]) io_uring_cqe_seen(&ring, cqe); } - if (do_unlink) - unlink(fname); + free_g_buf(); return d.err; err: - if (do_unlink) - unlink(fname); + free_g_buf(); return 1; } |