The TestBot should already be respecting that rule. But starting a process to operate on a VM always goes through VM::Run() so enforce this rule by checking that the VM's ChildPid field is not already set before starting a new process.
Signed-off-by: Francois Gouget fgouget@codeweavers.com --- testbot/lib/WineTestBot/VMs.pm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/testbot/lib/WineTestBot/VMs.pm b/testbot/lib/WineTestBot/VMs.pm index 78e066fe9..2bf350435 100644 --- a/testbot/lib/WineTestBot/VMs.pm +++ b/testbot/lib/WineTestBot/VMs.pm @@ -154,6 +154,7 @@ use WineTestBot::LibvirtDomain; use WineTestBot::Missions; use WineTestBot::RecordGroups; use WineTestBot::TestAgent; +use WineTestBot::Utils;
sub _initialize($$) @@ -374,9 +375,16 @@ sub OnSaved($) sub Run($$$$$$) { my ($self, $NewStatus, $Args, $ChildTimeout, $ChildSetup, $SetupData) = @_; - my $Tool = basename($Args->[0]);
+ if (defined $self->ChildPid) + { + my $ErrMessage = "Cannot run ". ShArgv2Cmd(@$Args) ." because the ". $self->ChildPid ." process is already using the ". $self->Name ." VM"; + require WineTestBot::Log; + WineTestBot::Log::LogMsg("$ErrMessage\n"); + return $ErrMessage; + } + # There are two $VM->ChildPid race conditions to avoid: # - Between the child process and new calls to ScheduleJobs(). # We cannot leave setting ChildPid to the child process because then it