int groupid = 0;
int thread_number = 0;
+int nr_process = 0;
+int nr_thread = 0;
int shm_id = 0;
int temp_stall_ts;
INIT_LIST_HEAD(&td->io_log_list);
if (init_io_u(td))
- goto err;
+ goto err_sem;
if (fio_setaffinity(td) == -1) {
td_verror(td, errno, "cpu_set_affinity");
- goto err;
+ goto err_sem;
}
if (init_iolog(td))
- goto err;
+ goto err_sem;
if (td->ioprio) {
if (ioprio_set(IOPRIO_WHO_PROCESS, 0, td->ioprio) == -1) {
td_verror(td, errno, "ioprio_set");
- goto err;
+ goto err_sem;
}
}
if (nice(td->nice) == -1) {
td_verror(td, errno, "nice");
- goto err;
+ goto err_sem;
}
if (init_random_state(td))
- goto err;
+ goto err_sem;
if (td->ioscheduler && switch_ioscheduler(td))
- goto err;
+ goto err_sem;
td_set_runstate(td, TD_INITIALIZED);
fio_sem_up(startup_sem);
cleanup_io_u(td);
td_set_runstate(td, TD_EXITED);
return (void *) (unsigned long) td->error;
+err_sem:
+ fio_sem_up(startup_sem);
+ goto err;
}
/*
return;
if (!terse_output) {
- printf("Starting %d thread%s\n", thread_number, thread_number > 1 ? "s" : "");
+ printf("Starting ");
+ if (nr_thread)
+ printf("%d thread%s", nr_thread, nr_thread > 1 ? "s" : "");
+ if (nr_process) {
+ if (nr_thread)
+ printf(" and ");
+ printf("%d process%s", nr_process, nr_process > 1 ? "es" : "");
+ }
+ printf("\n");
fflush(stdout);
}
if (pthread_create(&td->thread, NULL, thread_main, td)) {
perror("thread_create");
nr_started--;
+ break;
}
} else {
if (!fork()) {