fio: Fix padding properly
[fio.git] / stat.c
diff --git a/stat.c b/stat.c
index 03dc45880ed73b9a5cb051a59be37cfc29db1e78..84d9eefd842e76ca6a1d96a482ad3fd2a4c251a7 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -1422,7 +1422,7 @@ void show_run_stats(void)
        fio_mutex_up(stat_mutex);
 }
 
-static void *__show_running_run_stats(void *arg)
+void __show_running_run_stats(void)
 {
        struct thread_data *td;
        unsigned long long *rt;
@@ -1451,6 +1451,8 @@ static void *__show_running_run_stats(void *arg)
        }
 
        for_each_td(td, i) {
+               if (td->runstate >= TD_EXITED)
+                       continue;
                if (td->rusage_sem) {
                        td->update_rusage = 1;
                        fio_mutex_down(td->rusage_sem);
@@ -1471,34 +1473,6 @@ static void *__show_running_run_stats(void *arg)
 
        free(rt);
        fio_mutex_up(stat_mutex);
-       free(arg);
-       return NULL;
-}
-
-/*
- * Called from signal handler. It _should_ be safe to just run this inline
- * in the sig handler, but we should be disturbing the system less by just
- * creating a thread to do it.
- */
-void show_running_run_stats(void)
-{
-       pthread_t *thread;
-
-       thread = calloc(1, sizeof(*thread));
-       if (!thread)
-               return;
-
-       if (!pthread_create(thread, NULL, __show_running_run_stats, thread)) {
-               int err;
-
-               err = pthread_detach(*thread);
-               if (err)
-                       log_err("fio: DU thread detach failed: %s\n", strerror(err));
-
-               return;
-       }
-
-       free(thread);
 }
 
 static int status_interval_init;
@@ -1917,3 +1891,12 @@ void stat_exit(void)
        fio_mutex_down(stat_mutex);
        fio_mutex_remove(stat_mutex);
 }
+
+/*
+ * Called from signal handler. Wake up status thread.
+ */
+void show_running_run_stats(void)
+{
+       helper_do_stat = 1;
+       pthread_cond_signal(&helper_cond);
+}