ci: Verify the Android build
[fio.git] / backend.c
index a21dfef637bb74c2d6bf645d7f0e6a025961c072..e5bb4e259034b29af86fbaed018ae64c7bb288db 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -2021,7 +2021,7 @@ static void reap_threads(unsigned int *nr_running, uint64_t *t_rate,
        for_each_td(td, i) {
                int flags = 0;
 
-                if (!strcmp(td->o.ioengine, "cpuio"))
+               if (!strcmp(td->o.ioengine, "cpuio"))
                        cputhreads++;
                else
                        realthreads++;
@@ -2432,7 +2432,12 @@ reap:
                                                        strerror(ret));
                        } 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) {
                                        int ret;
@@ -2441,6 +2446,12 @@ 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(eo);
+                               free(fd);
+                               fd = NULL;
                        }
                        dprint(FD_MUTEX, "wait on startup_sem\n");
                        if (fio_sem_down_timeout(startup_sem, 10000)) {
@@ -2559,6 +2570,11 @@ int fio_backend(struct sk_out *sk_out)
                setup_log(&agg_io_log[DDIR_TRIM], &p, "agg-trim_bw.log");
        }
 
+       if (init_global_dedupe_working_set_seeds()) {
+               log_err("fio: failed to initialize global dedupe working set\n");
+               return 1;
+       }
+
        startup_sem = fio_sem_init(FIO_SEM_LOCKED);
        if (!sk_out)
                is_local_backend = true;