aboutsummaryrefslogtreecommitdiff
path: root/test/thread-exit.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/thread-exit.c')
-rw-r--r--test/thread-exit.c28
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;
}