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"
|
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);
|
sleep(1);
|
||||||
redo FORK;
|
redo FORK;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
mtr_error("$path ($pid) can't be forked, error: $!");
|
||||||
mtr_error("$path ($pid) can't be forked");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $pid )
|
if ( $pid )
|
||||||
{
|
{
|
||||||
spawn_parent_impl($pid,$mode,$path);
|
return spawn_parent_impl($pid,$mode,$path);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -202,8 +201,11 @@ sub spawn_impl ($$$$$$$$) {
|
|||||||
{
|
{
|
||||||
mtr_child_error("failed to execute \"$path\": $!");
|
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' )
|
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);
|
my $ret_pid= waitpid($pid,0);
|
||||||
if ( $ret_pid != $pid )
|
if ( $ret_pid != $pid )
|
||||||
{
|
{
|
||||||
mtr_error("waitpid($pid, 0) returned $ret_pid " .
|
# The "simple" waitpid has failed, print debug info
|
||||||
"when waiting for '$path'");
|
# 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($?);
|
return mtr_process_exit_status($?);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user