Commit 62d3063d authored by unknown's avatar unknown
Browse files

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
parent 480c30d9
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -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
+13 −4
Original line number Diff line number Diff line
@@ -2549,10 +2549,16 @@ sub ndbcluster_wait_started($$){
sub mysqld_wait_started($){
  my $mysqld= shift;

  my $res= sleep_until_file_created($mysqld->{'path_pid'},
  my $pid_from_pidfile=
    sleep_until_file_created($mysqld->{'path_pid'},
                             $mysqld->{'start_timeout'},
                             $mysqld->{'pid'});
  return $res == 0;

  # 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'},