Module: tools Branch: master Commit: 8bcaf6c8510abeb662b0ad0e61232d7c1c2fa432 URL: http://source.winehq.org/git/tools.git/?a=commit;h=8bcaf6c8510abeb662b0ad0e6...
Author: Francois Gouget fgouget@codeweavers.com Date: Tue Dec 11 12:07:45 2012 +0100
testbot: Capture the worker scripts Perl errors in the general log.
Also simplify the fork()+exec() code a bit.
---
testbot/bin/Engine.pl | 50 +++++++++++++++++---------------------- testbot/lib/WineTestBot/Log.pm | 18 ++++++++++++++ testbot/lib/WineTestBot/VMs.pm | 17 ++++++++----- 3 files changed, 50 insertions(+), 35 deletions(-)
diff --git a/testbot/bin/Engine.pl b/testbot/bin/Engine.pl index a26ac17..e233e80 100755 --- a/testbot/bin/Engine.pl +++ b/testbot/bin/Engine.pl @@ -120,18 +120,16 @@ sub HandleJobStatusChange { $ActiveBackEnds{'WineTestBot'}->PrepareForFork(); my $Pid = fork; - if (defined($Pid) && ! $Pid) + if (!defined $Pid) { - exec("$BinDir/${ProjectName}SendLog.pl $JobKey"); + LogMsg "Unable to fork for ${ProjectName}SendLog.pl: $!\n"; } - if (defined($Pid) && ! $Pid) + elsif (!$Pid) { - LogMsg "Unable to exec ${ProjectName}SendLog.pl : $!\n"; - exit; - } - if (! defined($Pid)) - { - LogMsg "Unable to fork for ${ProjectName}SendLog.pl : $!\n"; + WineTestBot::Log::SetupRedirects(); + exec("$BinDir/${ProjectName}SendLog.pl $JobKey") or + LogMsg "Unable to exec ${ProjectName}SendLog.pl: $!\n"; + exit(1); } }
@@ -214,18 +212,16 @@ sub CheckForWinetestUpdate
$ActiveBackEnds{'WineTestBot'}->PrepareForFork(); my $Pid = fork; - if (defined($Pid) && ! $Pid) - { - exec("$BinDir/CheckForWinetestUpdate.pl $Bits"); - } - if (defined($Pid) && ! $Pid) + if (!defined $Pid) { - LogMsg "Unable to exec CheckForWinetestUpdate.pl : $!\n"; - exit; + LogMsg "Unable to fork for CheckForWinetestUpdate.pl: $!\n"; } - if (! defined($Pid)) + elsif (!$Pid) { - LogMsg "Unable to fork for CheckForWinetestUpdate.pl : $!\n"; + WineTestBot::Log::SetupRedirects(); + exec("$BinDir/CheckForWinetestUpdate.pl $Bits") or + LogMsg "Unable to exec CheckForWinetestUpdate.pl: $!\n"; + exit(1); } }
@@ -365,19 +361,17 @@ sub HandleWinePatchWebNotification { $ActiveBackEnds{'WineTestBot'}->PrepareForFork(); my $Pid = fork; - if (defined($Pid) && ! $Pid) + if (!defined $Pid) { - exec("$BinDir/WinePatchesWebGet.pl " . ($MaxExistingWebPatchId + 1) . - " " . $LatestWebPatchId); - } - if (defined($Pid) && ! $Pid) - { - LogMsg "Unable to exec WinePatchesWebGet.pl : $!\n"; - exit; + LogMsg "Unable to fork for WinePatchesWebGet.pl: $!\n"; } - if (! defined($Pid)) + elsif (!$Pid) { - LogMsg "Unable to fork for WinePatchesWebGet.pl : $!\n"; + WineTestBot::Log::SetupRedirects(); + exec("$BinDir/WinePatchesWebGet.pl " . ($MaxExistingWebPatchId + 1) . + " " . $LatestWebPatchId) or + LogMsg "Unable to exec WinePatchesWebGet.pl: $!\n"; + exit(1); } }
diff --git a/testbot/lib/WineTestBot/Log.pm b/testbot/lib/WineTestBot/Log.pm index 102b74d..6982943 100644 --- a/testbot/lib/WineTestBot/Log.pm +++ b/testbot/lib/WineTestBot/Log.pm @@ -57,4 +57,22 @@ sub LogMsg(@) print $logfile scalar localtime, " ", $logprefix, ": ", @_ if ($logfile); }
+sub SetupRedirects() +{ + if (defined $logfile) + { + if (open(STDERR, ">>&", $logfile)) + { + # Make sure stderr still flushes after each print + my $tmp=select(STDERR); + $| = 1; + select($tmp); + } + else + { + LogMsg "unable to redirect stderr to the log file\n"; + } + } +} + 1; diff --git a/testbot/lib/WineTestBot/VMs.pm b/testbot/lib/WineTestBot/VMs.pm index 82ad379..a42fb12 100644 --- a/testbot/lib/WineTestBot/VMs.pm +++ b/testbot/lib/WineTestBot/VMs.pm @@ -526,16 +526,19 @@ sub RunRevert
$self->GetBackEnd()->PrepareForFork(); my $Pid = fork; - if (defined($Pid) && ! $Pid) + if (!defined $Pid) { - $ENV{PATH} = "/usr/bin:/bin"; - delete $ENV{ENV}; - exec("$BinDir/RevertVM.pl", $self->GetKey()); - exit; + return "Unable to start child process: $!"; } - if (! defined($Pid)) + elsif (!$Pid) { - return "Unable to start child process: $!"; + $ENV{PATH} = "/usr/bin:/bin"; + delete $ENV{ENV}; + WineTestBot::Log::SetupRedirects(); + exec("$BinDir/RevertVM.pl", $self->GetKey()) or + require WineTestBot::Log; + WineTestBot::Log::LogMsg "Unable to exec RevertVM.pl: $!\n"; + exit(1); }
return undef;