fio: fix interaction between offset/size limited threads and "max_open_zones"
[fio.git] / libfio.c
index 6faf32a4e918158cc19a7196a28098c93e7bb111..7348b16491ff266cadb7ba46d75e503984ccbc95 100644 (file)
--- a/libfio.c
+++ b/libfio.c
@@ -92,6 +92,7 @@ static void reset_io_counters(struct thread_data *td, int all)
                        td->bytes_done[ddir] = 0;
                        td->rate_io_issue_bytes[ddir] = 0;
                        td->rate_next_io_time[ddir] = 0;
+                       td->last_usec[ddir] = 0;
                }
        }
 
@@ -232,7 +233,7 @@ void fio_mark_td_terminate(struct thread_data *td)
        td->terminate = true;
 }
 
-void fio_terminate_threads(unsigned int group_id)
+void fio_terminate_threads(unsigned int group_id, unsigned int terminate)
 {
        struct thread_data *td;
        pid_t pid = getpid();
@@ -241,7 +242,10 @@ void fio_terminate_threads(unsigned int group_id)
        dprint(FD_PROCESS, "terminate group_id=%d\n", group_id);
 
        for_each_td(td, i) {
-               if (group_id == TERMINATE_ALL || group_id == td->groupid) {
+               if ((terminate == TERMINATE_GROUP && group_id == TERMINATE_ALL) ||
+                   (terminate == TERMINATE_GROUP && group_id == td->groupid) ||
+                   (terminate == TERMINATE_STONEWALL && td->runstate >= TD_RUNNING) ||
+                   (terminate == TERMINATE_ALL)) {
                        dprint(FD_PROCESS, "setting terminate on %s/%d\n",
                                                td->o.name, (int) td->pid);