Catch too large memory allocations that cause size_t to wrap
[fio.git] / init.c
diff --git a/init.c b/init.c
index 23fe8dc69e2bfb820e9de322919bd315eac9249a..b4b4abe2a8d3119edd30de60b7ab15c57ffe2a7c 100644 (file)
--- a/init.c
+++ b/init.c
@@ -425,7 +425,8 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
        td->ts.slat_stat[0].min_val = td->ts.slat_stat[1].min_val = ULONG_MAX;
        td->ts.bw_stat[0].min_val = td->ts.bw_stat[1].min_val = ULONG_MAX;
 
-       if ((td->o.stonewall || td->o.numjobs > 1) && prev_group_jobs) {
+       if ((td->o.stonewall || td->o.numjobs > 1 || td->o.new_group)
+            && prev_group_jobs) {
                prev_group_jobs = 0;
                groupid++;
        }
@@ -498,11 +499,6 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
                        goto err;
        }
 
-       if (td->o.numjobs > 1) {
-               groupid++;
-               prev_group_jobs = 0;
-       }
-
        return 0;
 err:
        put_job(td);