Bug#26686 mysql-test-run.pl aborts when waitpid returns -1
- Add error handling for waitpid returns -1 for "simple run of command" mysql-test/lib/mtr_process.pl: - Add error handling for waitpid returns -1 when a simple command is run. - Add missing return - Add mtr_errors where the program should never come - Remove an else to improve program readability - Change mtr_debug to mtr_warning for "Got EAGAIN from fork()..."
This commit is contained in:
parent
64278d4fc9
commit
e40bcac08e
@ -125,19 +125,18 @@ sub spawn_impl ($$$$$$$$) {
|
||||
{
|
||||
if ( $! == $!{EAGAIN} ) # See "perldoc Errno"
|
||||
{
|
||||
mtr_debug("Got EAGAIN from fork(), sleep 1 second and redo");
|
||||
mtr_warning("Got EAGAIN from fork(), sleep 1 second and redo");
|
||||
sleep(1);
|
||||
redo FORK;
|
||||
}
|
||||
else
|
||||
{
|
||||
mtr_error("$path ($pid) can't be forked");
|
||||
}
|
||||
|
||||
mtr_error("$path ($pid) can't be forked, error: $!");
|
||||
|
||||
}
|
||||
|
||||
if ( $pid )
|
||||
{
|
||||
spawn_parent_impl($pid,$mode,$path);
|
||||
return spawn_parent_impl($pid,$mode,$path);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -202,8 +201,11 @@ sub spawn_impl ($$$$$$$$) {
|
||||
{
|
||||
mtr_child_error("failed to execute \"$path\": $!");
|
||||
}
|
||||
mtr_error("Should never come here 1!");
|
||||
}
|
||||
mtr_error("Should never come here 2!");
|
||||
}
|
||||
mtr_error("Should never come here 3!");
|
||||
}
|
||||
|
||||
|
||||
@ -216,12 +218,21 @@ sub spawn_parent_impl {
|
||||
{
|
||||
if ( $mode eq 'run' )
|
||||
{
|
||||
# Simple run of command, we wait for it to return
|
||||
# Simple run of command, wait blocking for it to return
|
||||
my $ret_pid= waitpid($pid,0);
|
||||
if ( $ret_pid != $pid )
|
||||
{
|
||||
mtr_error("waitpid($pid, 0) returned $ret_pid " .
|
||||
"when waiting for '$path'");
|
||||
# The "simple" waitpid has failed, print debug info
|
||||
# and try to handle the error
|
||||
mtr_warning("waitpid($pid, 0) returned $ret_pid " .
|
||||
"when waiting for '$path', error: '$!'");
|
||||
if ( $ret_pid == -1 )
|
||||
{
|
||||
# waitpid returned -1, that would indicate the process
|
||||
# no longer exist and waitpid couldn't wait for it.
|
||||
return 1;
|
||||
}
|
||||
mtr_error("Error handling failed");
|
||||
}
|
||||
|
||||
return mtr_process_exit_status($?);
|
||||
|
Loading…
x
Reference in New Issue
Block a user