Fix killing of threads that haven't started
authorMichael Callahan <MCallahan@fusionio.com>
Thu, 14 Jul 2011 05:56:37 +0000 (07:56 +0200)
committerJens Axboe <jaxboe@fusionio.com>
Thu, 14 Jul 2011 05:56:37 +0000 (07:56 +0200)
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 <jaxboe@fusionio.com>
fio.c

diff --git a/fio.c b/fio.c
index 2855ddf289748cf93e506aa7950aa82c2ac43e11..9e9106d55113b54785993649c38768824e6c755a 100644 (file)
--- 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;