Only decrement pending in reap_threads() if the reaped job was pending
[fio.git] / fio.c
diff --git a/fio.c b/fio.c
index 1997bb7cc8761e28ba9baf9f8d303530805d37ab..231a581f5478df56054531137d2f1b17ebc3ba57 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -74,10 +74,12 @@ static void terminate_threads(int group_id)
        struct thread_data *td;
        int i;
 
+       dprint(FD_PROCESS, "terminate group_id=%d\n", group_id);
+
        for_each_td(td, i) {
                if (group_id == TERMINATE_ALL || groupid == td->groupid) {
-                       dprint(FD_PROCESS, "setting terminate on %d\n",
-                                                               td->pid);
+                       dprint(FD_PROCESS, "setting terminate on %s/%d\n",
+                                                       td->o.name, td->pid);
                        td->terminate = 1;
                        td->o.start_delay = 0;
 
@@ -1111,7 +1113,8 @@ reaped:
                (*nr_running)--;
                (*m_rate) -= td->o.ratemin;
                (*t_rate) -= td->o.rate;
-               pending--;
+               if (!td->pid)
+                       pending--;
 
                if (td->error)
                        exit_value++;
@@ -1222,8 +1225,11 @@ static void run_threads(void)
                                        continue;
                        }
 
-                       if (td->o.stonewall && (nr_started || nr_running))
+                       if (td->o.stonewall && (nr_started || nr_running)) {
+                               dprint(FD_PROCESS, "%s: stonewall wait\n",
+                                                       td->o.name);
                                break;
+                       }
 
                        /*
                         * Set state to created. Thread will transition