Fix occasional hangs on mutexes
[fio.git] / libfio.c
index 09591a11f169dd2bcccf1e89f7588a68a5e4c423..55762d7be3cc99617c95e9981f9cc40413e3b4c0 100644 (file)
--- a/libfio.c
+++ b/libfio.c
@@ -33,6 +33,7 @@
 #include "smalloc.h"
 #include "os/os.h"
 #include "filelock.h"
+#include "helper_thread.h"
 
 /*
  * Just expose an empty list, if the OS does not support disk util stats
@@ -146,8 +147,12 @@ void reset_all_stats(struct thread_data *td)
        fio_gettime(&tv, NULL);
        memcpy(&td->epoch, &tv, sizeof(tv));
        memcpy(&td->start, &tv, sizeof(tv));
+       memcpy(&td->iops_sample_time, &tv, sizeof(tv));
+       memcpy(&td->bw_sample_time, &tv, sizeof(tv));
 
        lat_target_reset(td);
+       clear_rusage_stat(td);
+       helper_reset();
 }
 
 void reset_fio_state(void)
@@ -189,7 +194,7 @@ static const char *td_runstates[] = {
        "REAPED",
 };
 
-static const char *runstate_to_name(int runstate)
+const char *runstate_to_name(int runstate)
 {
        compiletime_assert(TD_LAST == 12, "td runstate list");
        if (runstate >= 0 && runstate < TD_LAST)
@@ -229,7 +234,7 @@ void fio_mark_td_terminate(struct thread_data *td)
        td->terminate = 1;
 }
 
-void fio_terminate_threads(int group_id)
+void fio_terminate_threads(unsigned int group_id)
 {
        struct thread_data *td;
        pid_t pid = getpid();
@@ -238,7 +243,7 @@ void fio_terminate_threads(int group_id)
        dprint(FD_PROCESS, "terminate group_id=%d\n", group_id);
 
        for_each_td(td, i) {
-               if (group_id == TERMINATE_ALL || groupid == td->groupid) {
+               if (group_id == TERMINATE_ALL || group_id == td->groupid) {
                        dprint(FD_PROCESS, "setting terminate on %s/%d\n",
                                                td->o.name, (int) td->pid);