From 503193867ef8ee460b03ebfa9cb8e0409624c257 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 11 Feb 2006 22:50:59 +0100 Subject: [PATCH] Fix a race on some platforms in mysql-test-run.pl, where it would sometimes errorneously abort reporting failure to kill child processes, where in reality the problem was merely that the child had become a zombie because of missing waitpid() call. mysql-test/lib/mtr_process.pl: Fix race (on some platforms) when killing processes. --- mysql-test/lib/mtr_process.pl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/mysql-test/lib/mtr_process.pl b/mysql-test/lib/mtr_process.pl index 177665cf578..4da608ad345 100644 --- a/mysql-test/lib/mtr_process.pl +++ b/mysql-test/lib/mtr_process.pl @@ -770,7 +770,15 @@ sub mtr_record_dead_children () { } sub start_reap_all { - $SIG{CHLD}= 'IGNORE'; # FIXME is this enough? + # This causes terminating processes to not become zombies, avoiding + # the need for (or possibility of) explicit waitpid(). + $SIG{CHLD}= 'IGNORE'; + + # On some platforms (Linux, QNX, OSX, ...) there is potential race + # here. If a process terminated before setting $SIG{CHLD} (but after + # any attempt to waitpid() it), it will still be a zombie. So we + # have to handle any such process here. + while(waitpid(-1, &WNOHANG) > 0) { }; } sub stop_reap_all {