* if the thread is running, just let it exit
*/
if (td->runstate < TD_RUNNING)
- kill(td->pid, SIGQUIT);
+ kill(td->pid, SIGTERM);
else {
struct ioengine_ops *ops = td->io_ops;
- if (ops && (ops->flags & FIO_SIGQUIT))
- kill(td->pid, SIGQUIT);
+ if (ops && (ops->flags & FIO_SIGTERM))
+ kill(td->pid, SIGTERM);
}
}
}
evt.sigev_notify = SIGEV_THREAD;
evt.sigev_notify_function = ival_fn;
+#ifndef __CYGWIN__
if (timer_create(CLOCK_MONOTONIC, &evt, &ival_timer) < 0)
perror("timer_create");
+#else /* Windows (and thus Cygwin) doesn't have a monotonic clock */
+ if (timer_create(CLOCK_REALTIME, &evt, &ival_timer) < 0)
+ perror("timer_create");
+#endif
+
}
static void set_sig_handlers(void)
memset(&act, 0, sizeof(act));
act.sa_handler = sig_quit;
act.sa_flags = SA_RESTART;
- sigaction(SIGQUIT, &act, NULL);
+ sigaction(SIGTERM, &act, NULL);
}
/*
}
fio_gettime(&tv, NULL);
+ td->ts.runtime[0] = 0;
+ td->ts.runtime[1] = 0;
memcpy(&td->epoch, &tv, sizeof(tv));
memcpy(&td->start, &tv, sizeof(tv));
}
*/
static void *thread_main(void *data)
{
- unsigned long long runtime[2], elapsed;
+ unsigned long long elapsed;
struct thread_data *td = data;
pthread_condattr_t attr;
int clear_state;
fio_gettime(&td->epoch, NULL);
getrusage(RUSAGE_SELF, &td->ts.ru_start);
- runtime[0] = runtime[1] = 0;
clear_state = 0;
while (keep_running(td)) {
fio_gettime(&td->start, NULL);
if (td_read(td) && td->io_bytes[DDIR_READ]) {
elapsed = utime_since_now(&td->start);
- runtime[DDIR_READ] += elapsed;
+ td->ts.runtime[DDIR_READ] += elapsed;
}
if (td_write(td) && td->io_bytes[DDIR_WRITE]) {
elapsed = utime_since_now(&td->start);
- runtime[DDIR_WRITE] += elapsed;
+ td->ts.runtime[DDIR_WRITE] += elapsed;
}
if (td->error || td->terminate)
do_verify(td);
- runtime[DDIR_READ] += utime_since_now(&td->start);
+ td->ts.runtime[DDIR_READ] += utime_since_now(&td->start);
if (td->error || td->terminate)
break;
}
update_rusage_stat(td);
- td->ts.runtime[0] = (runtime[0] + 999) / 1000;
- td->ts.runtime[1] = (runtime[1] + 999) / 1000;
+ td->ts.runtime[0] = (td->ts.runtime[0] + 999) / 1000;
+ td->ts.runtime[1] = (td->ts.runtime[1] + 999) / 1000;
td->ts.total_run_time = mtime_since_now(&td->epoch);
td->ts.io_bytes[0] = td->io_bytes[0];
td->ts.io_bytes[1] = td->io_bytes[1];
if (WIFSIGNALED(status)) {
int sig = WTERMSIG(status);
- if (sig != SIGQUIT)
+ if (sig != SIGTERM)
log_err("fio: pid=%d, got signal=%d\n",
(int) td->pid, sig);
td_set_runstate(td, TD_REAPED);
}
startup_mutex = fio_mutex_init(0);
+ if (startup_mutex == NULL)
+ return 1;
writeout_mutex = fio_mutex_init(1);
+ if (writeout_mutex == NULL)
+ return 1;
set_genesis_time();