fixed memory leak detected by ASAN
authorDenis Pronin <dannftk@yandex.ru>
Wed, 9 Mar 2022 16:41:45 +0000 (19:41 +0300)
committerDenis Pronin <dannftk@yandex.ru>
Thu, 10 Mar 2022 14:06:46 +0000 (17:06 +0300)
release memory occupied for td->files for each thread_data
in the parent process

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

index cd7f4e5f62e3fcf2c3df6d1699114a23b4a8ee88..001b2b96477465f683fa6fbafc83231799de515c 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -2432,7 +2432,10 @@ reap:
                                                        strerror(ret));
                        } else {
                                pid_t pid;
+                               struct fio_file **files;
                                dprint(FD_PROCESS, "will fork\n");
+                               files = td->files;
+                               read_barrier();
                                pid = fork();
                                if (!pid) {
                                        int ret;
@@ -2441,6 +2444,9 @@ reap:
                                        _exit(ret);
                                } else if (i == fio_debug_jobno)
                                        *fio_debug_jobp = pid;
+                               // 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(fd);
                                fd = NULL;
                        }