fixed possible and actual memory leaks
authorDenis Pronin <dannftk@yandex.ru>
Fri, 11 Mar 2022 12:13:46 +0000 (15:13 +0300)
committerDenis Pronin <dannftk@yandex.ru>
Sun, 10 Apr 2022 04:40:29 +0000 (07:40 +0300)
backend.c: release memory occupied by the parent process for options
ioengines.c: free_ioengine entry point is protected by 'assert' call
upon td and td->io_ops

Signed-off-by: Denis Pronin <dannftk@yandex.ru>
backend.c
ioengines.c

index 001b2b96477465f683fa6fbafc83231799de515c..317e4f6c0d642d26c7f70ac2ab93aa33851082c2 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -2433,8 +2433,10 @@ reap:
                        } else {
                                pid_t pid;
                                struct fio_file **files;
+                               void *eo;
                                dprint(FD_PROCESS, "will fork\n");
                                files = td->files;
+                               eo = td->eo;
                                read_barrier();
                                pid = fork();
                                if (!pid) {
@@ -2447,6 +2449,7 @@ reap:
                                // freeing previously allocated memory for files
                                // this memory freed MUST NOT be shared between processes, only the pointer itself may be shared within TD
                                free(files);
+                               free(eo);
                                free(fd);
                                fd = NULL;
                        }
index d08a511a0635eccc090528dfa2ff242fd5719209..68f307e541a9f5b0cd469c5f7fc695506b8e5144 100644 (file)
@@ -223,6 +223,8 @@ struct ioengine_ops *load_ioengine(struct thread_data *td)
  */
 void free_ioengine(struct thread_data *td)
 {
+       assert(td != NULL && td->io_ops != NULL);
+
        dprint(FD_IO, "free ioengine %s\n", td->io_ops->name);
 
        if (td->eo && td->io_ops->options) {