diff options
author | Jens Axboe <axboe@kernel.dk> | 2023-07-28 09:11:15 -0600 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2023-07-28 09:11:15 -0600 |
commit | 696abd97e2b15d96374b866e577f0afaa4f6f62c (patch) | |
tree | 44dcc4ca137df48d51022378dacbaed31f4f0a3e | |
parent | f12affacf164b6e6997ee97d6ed66c35633414df (diff) | |
parent | 913028e97ceedcf2cf1ec6ec32228b3c50e7337c (diff) | |
download | fio-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.c | 4 | ||||
-rw-r--r-- | ioengines.c | 3 | ||||
-rw-r--r-- | options.c | 4 |
3 files changed, 4 insertions, 7 deletions
@@ -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) { @@ -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) |