From 6aa2781630cf6f502d5e9177d9bd3432c1b5b964 Mon Sep 17 00:00:00 2001 From: Michael Callahan Date: Thu, 14 Jul 2011 07:56:37 +0200 Subject: [PATCH] Fix killing of threads that haven't started If there is a thread that has not started yet (for instance with a long startdelay or a stonewall) then a SIGINT will fire off terminate_threads which runs through all of the threads and calls kill(pid, SIGTERM). However the threads that have not started yet have a pid of 0. When you call kill(0, SIGTERM) it kills the entire thread group which can extend out of fio. I have included a short patch which fixes this for me. Signed-off-by: Jens Axboe --- fio.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fio.c b/fio.c index 2855ddf2..9e9106d5 100644 --- a/fio.c +++ b/fio.c @@ -102,7 +102,9 @@ static void terminate_threads(int group_id) /* * if the thread is running, just let it exit */ - if (td->runstate < TD_RAMP) + if (!td->pid) + continue; + else if (td->runstate < TD_RAMP) kill(td->pid, SIGTERM); else { struct ioengine_ops *ops = td->io_ops; -- 2.25.1