summaryrefslogtreecommitdiff
path: root/mysql-test/lib/mtr_process.pl
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/lib/mtr_process.pl')
-rw-r--r--mysql-test/lib/mtr_process.pl25
1 files changed, 15 insertions, 10 deletions
diff --git a/mysql-test/lib/mtr_process.pl b/mysql-test/lib/mtr_process.pl
index 53bf37bcc83..b20c9b65dd5 100644
--- a/mysql-test/lib/mtr_process.pl
+++ b/mysql-test/lib/mtr_process.pl
@@ -562,7 +562,7 @@ sub mtr_check_stop_servers ($) {
# Return if no processes are defined
return if ! @$spec;
- #mtr_report("mtr_check_stop_servers");
+ mtr_verbose("mtr_check_stop_servers");
mtr_ping_with_timeout(\@$spec);
@@ -605,7 +605,10 @@ sub mtr_check_stop_servers ($) {
{
if ( $srv->{'pid'} )
{
- $mysqld_pids{$srv->{'pid'}}= 1;
+ # Add the process pid to list of pids to kill
+ # if the process has a "real_pid" use it
+ $mysqld_pids{$srv->{'real_pid'} ?
+ $srv->{'real_pid'} : $srv->{'pid'}}= 1;
}
else
{
@@ -638,13 +641,9 @@ sub mtr_check_stop_servers ($) {
# that for true Win32 processes, kill(0,$pid) will not return 1.
# ----------------------------------------------------------------------
- start_reap_all(); # Avoid zombies
-
my @mysqld_pids= keys %mysqld_pids;
mtr_kill_processes(\@mysqld_pids);
- stop_reap_all(); # Get into control again
-
# ----------------------------------------------------------------------
# Now, we check if all we can find using kill(0,$pid) are dead,
# and just assume the rest are. We cleanup socket and PID files.
@@ -654,14 +653,15 @@ sub mtr_check_stop_servers ($) {
my $errors= 0;
foreach my $srv ( @$spec )
{
- if ( $srv->{'pid'} )
+ my $pid= $srv->{'real_pid'} ? $srv->{'real_pid'} : $srv->{'pid'};
+ if ( $pid )
{
- if ( kill(0,$srv->{'pid'}) )
+ if ( kill(0, $pid) )
{
# FIXME In Cygwin there seem to be some fast reuse
# of PIDs, so dying may not be the right thing to do.
$errors++;
- mtr_warning("can't kill process $srv->{'pid'}");
+ mtr_warning("can't kill process $pid");
}
else
{
@@ -682,6 +682,8 @@ sub mtr_check_stop_servers ($) {
mtr_warning("couldn't delete $file");
}
}
+ # Reap the child
+ waitpid($srv->{'pid'},&WNOHANG);
$srv->{'pid'}= 0;
}
}
@@ -1063,7 +1065,10 @@ sub sleep_until_file_created ($$$) {
{
if ( -r $pidfile )
{
- return $pid;
+ # Read real pid from pidfile
+ my $real_pid= mtr_fromfile($pidfile);
+ mtr_verbose("pid: $pid, real_pid: $real_pid");
+ return $real_pid;
}
# Check if it died after the fork() was successful