X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=fio.c;h=7a420daf909afb84009792d63d2b146d85ce520d;hb=ccb0fa24f0ff37f9270754ea5a1b66de9fd7053e;hp=c5926289b34475bd511e8b8b5fadb0ce44b50c06;hpb=5921e80c5dfc9f96d2f21da6ae58f2b5d3a0b373;p=fio.git diff --git a/fio.c b/fio.c index c5926289..7a420daf 100644 --- a/fio.c +++ b/fio.c @@ -54,6 +54,7 @@ unsigned long done_secs = 0; static struct fio_mutex *startup_mutex; static volatile int fio_abort; static int exit_value; +static struct itimerval itimer; struct io_log *agg_io_log[2]; @@ -99,16 +100,34 @@ static void terminate_threads(int group_id) } } +static void status_timer_arm(void) +{ + itimer.it_value.tv_sec = 0; + itimer.it_value.tv_usec = DISK_UTIL_MSEC * 1000; + setitimer(ITIMER_REAL, &itimer, NULL); +} + +/* + * We need to rearm on BSD/solaris. Switch this to sigaction in the future... + */ +static void set_sig_handlers(void (*sighandler)(int)) +{ + signal(SIGINT, sighandler); + signal(SIGALRM, sighandler); +} + static void sig_handler(int sig) { + set_sig_handlers(sig_handler); + if (!threads) return; switch (sig) { case SIGALRM: update_io_ticks(); - disk_util_timer_arm(); print_thread_status(); + status_timer_arm(); break; default: printf("\nfio: terminating on signal %d\n", sig); @@ -1137,8 +1156,7 @@ static void run_threads(void) fflush(stdout); } - signal(SIGINT, sig_handler); - signal(SIGALRM, sig_handler); + set_sig_handlers(sig_handler); todo = thread_number; nr_running = 0; @@ -1356,7 +1374,7 @@ int main(int argc, char *argv[]) set_genesis_time(); - disk_util_timer_arm(); + status_timer_arm(); run_threads();