From 7ceefc0914b9ff721047b4dc8be54625d43f577c Mon Sep 17 00:00:00 2001 From: "Friendy.Su@sony.com" Date: Thu, 7 Jun 2018 20:27:25 -0600 Subject: [PATCH] idle-prof: Fix segment fault issue when run with '--idle-prof' and multiple output format normal,json Original issue: ./fio --output-format=normal,json --idle-prof=system jobfile.job job1: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=sync, iodepth=1 fio-3.7-19-ga43f Starting 1 process Segmentation fault (core dumped) Fix solution: do fio_idle_prof_cleanup() after all formats of output shown. Signed-off-by: friendy-su Signed-off-by: Jens Axboe --- idletime.c | 8 +------- idletime.h | 2 ++ stat.c | 2 ++ 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/idletime.c b/idletime.c index 8762c856..2f59f510 100644 --- a/idletime.c +++ b/idletime.c @@ -397,7 +397,7 @@ static double fio_idle_prof_cpu_stat(int cpu) return p * 100.0; } -static void fio_idle_prof_cleanup(void) +void fio_idle_prof_cleanup(void) { if (ipc.ipts) { free(ipc.ipts); @@ -471,10 +471,6 @@ void show_idle_prof_stats(int output, struct json_object *parent, log_buf(out, " stddev=%3.2f\n", ipc.cali_stddev); } - /* dynamic mem allocations can now be freed */ - if (ipc.opt != IDLE_PROF_OPT_NONE) - fio_idle_prof_cleanup(); - return; } @@ -498,7 +494,5 @@ void show_idle_prof_stats(int output, struct json_object *parent, json_object_add_value_float(tmp, "unit_mean", ipc.cali_mean); json_object_add_value_float(tmp, "unit_stddev", ipc.cali_stddev); - - fio_idle_prof_cleanup(); } } diff --git a/idletime.h b/idletime.h index 6c1161a7..91ca95f5 100644 --- a/idletime.h +++ b/idletime.h @@ -58,4 +58,6 @@ extern void fio_idle_prof_stop(void); extern void show_idle_prof_stats(int, struct json_object *, struct buf_output *); +extern void fio_idle_prof_cleanup(void); + #endif diff --git a/stat.c b/stat.c index 5b49dddb..58edf047 100644 --- a/stat.c +++ b/stat.c @@ -1934,6 +1934,8 @@ void __show_run_stats(void) buf_output_free(out); } + fio_idle_prof_cleanup(); + log_info_flush(); free(runstats); free(threadstats); -- 2.25.1