mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
Bug#25657 mysql-test-run.pl kill itself under ActiveState perl
- Read the pid from pidfile in order to be able to kill the real process instead of the pseudo process. Most platforms will have the same real_pid as pid - Kill using the real pid mysql-test/lib/mtr_process.pl: Kill using the "real_pid" mysql-test/mysql-test-run.pl: Read the pid from pidfile in order to be able to kill the real process instead of the pseudo process. Most platforms will have the same real_pid as pid
This commit is contained in:
parent
480c30d932
commit
62d3063dc1
2 changed files with 28 additions and 14 deletions
|
@ -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
|
||||
|
|
|
@ -2549,10 +2549,16 @@ sub ndbcluster_wait_started($$){
|
|||
sub mysqld_wait_started($){
|
||||
my $mysqld= shift;
|
||||
|
||||
my $res= sleep_until_file_created($mysqld->{'path_pid'},
|
||||
$mysqld->{'start_timeout'},
|
||||
$mysqld->{'pid'});
|
||||
return $res == 0;
|
||||
my $pid_from_pidfile=
|
||||
sleep_until_file_created($mysqld->{'path_pid'},
|
||||
$mysqld->{'start_timeout'},
|
||||
$mysqld->{'pid'});
|
||||
|
||||
# On platforms with pseudo threads we need to save
|
||||
# the real pid of mysqld read from pidfile
|
||||
$mysqld->{'real_pid'}= $pid_from_pidfile;
|
||||
|
||||
return $pid_from_pidfile == 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -4047,6 +4053,7 @@ sub stop_all_servers () {
|
|||
|
||||
push(@kill_pids,{
|
||||
pid => $mysqld->{'pid'},
|
||||
real_pid => $mysqld->{'real_pid'},
|
||||
pidfile => $mysqld->{'path_pid'},
|
||||
sockfile => $mysqld->{'path_sock'},
|
||||
port => $mysqld->{'port'},
|
||||
|
@ -4253,6 +4260,7 @@ sub run_testcase_stop_servers($$$) {
|
|||
|
||||
push(@kill_pids,{
|
||||
pid => $mysqld->{'pid'},
|
||||
real_pid => $mysqld->{'real_pid'},
|
||||
pidfile => $mysqld->{'path_pid'},
|
||||
sockfile => $mysqld->{'path_sock'},
|
||||
port => $mysqld->{'port'},
|
||||
|
@ -4303,6 +4311,7 @@ sub run_testcase_stop_servers($$$) {
|
|||
|
||||
push(@kill_pids,{
|
||||
pid => $mysqld->{'pid'},
|
||||
real_pid => $mysqld->{'real_pid'},
|
||||
pidfile => $mysqld->{'path_pid'},
|
||||
sockfile => $mysqld->{'path_sock'},
|
||||
port => $mysqld->{'port'},
|
||||
|
|
Loading…
Reference in a new issue