aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2023-07-28 09:11:15 -0600
committerJens Axboe <axboe@kernel.dk>2023-07-28 09:11:15 -0600
commit696abd97e2b15d96374b866e577f0afaa4f6f62c (patch)
tree44dcc4ca137df48d51022378dacbaed31f4f0a3e
parentf12affacf164b6e6997ee97d6ed66c35633414df (diff)
parent913028e97ceedcf2cf1ec6ec32228b3c50e7337c (diff)
downloadfio-696abd97e2b15d96374b866e577f0afaa4f6f62c.tar.gz
Merge branch 'td-eo-double-free-fix' of https://github.com/dpronin/fio
* 'td-eo-double-free-fix' of https://github.com/dpronin/fio: correctly free thread_data options at the topmost parent process
-rw-r--r--backend.c4
-rw-r--r--ioengines.c3
-rw-r--r--options.c4
3 files changed, 4 insertions, 7 deletions
diff --git a/backend.c b/backend.c
index 5f0740395..b21c36640 100644
--- a/backend.c
+++ b/backend.c
@@ -2494,10 +2494,7 @@ reap:
strerror(ret));
} else {
pid_t pid;
- void *eo;
dprint(FD_PROCESS, "will fork\n");
- eo = td->eo;
- read_barrier();
pid = fork();
if (!pid) {
int ret;
@@ -2506,7 +2503,6 @@ reap:
_exit(ret);
} else if (__td_index == fio_debug_jobno)
*fio_debug_jobp = pid;
- free(eo);
free(fd);
fd = NULL;
}
diff --git a/ioengines.c b/ioengines.c
index 361727250..fd8c9d1a6 100644
--- a/ioengines.c
+++ b/ioengines.c
@@ -238,7 +238,8 @@ void free_ioengine(struct thread_data *td)
if (td->eo && td->io_ops->options) {
options_free(td->io_ops->options, td->eo);
free(td->eo);
- td->eo = NULL;
+ if (td->o.use_thread)
+ td->eo = NULL;
}
if (td->io_ops->dlhandle) {
diff --git a/options.c b/options.c
index 48aa0d7b1..9432a0fbd 100644
--- a/options.c
+++ b/options.c
@@ -5829,9 +5829,9 @@ void fio_options_free(struct thread_data *td)
options_free(fio_options, &td->o);
if (td->eo && td->io_ops && td->io_ops->options) {
options_free(td->io_ops->options, td->eo);
- free(td->eo);
- td->eo = NULL;
}
+ free(td->eo);
+ td->eo = NULL;
}
void fio_dump_options_free(struct thread_data *td)