Francois Gouget : testbot/LibvirtTool: Wait a bit between shutting down and reverting a VM.

Alexandre Julliard julliard at winehq.org
Tue Feb 15 15:55:38 CST 2022


Module: tools
Branch: master
Commit: d5be151028e0dab3e1d323e4e6a0fc9be2061118
URL:    https://source.winehq.org/git/tools.git/?a=commit;h=d5be151028e0dab3e1d323e4e6a0fc9be2061118

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Tue Feb 15 05:03:17 2022 +0100

testbot/LibvirtTool: Wait a bit between shutting down and reverting a VM.

Also rename ShutDown() to the more descriptive ShutDownIfOffSnapshot()
and document it.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 testbot/bin/LibvirtTool.pl | 29 ++++++++++++++++++++++-------
 1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/testbot/bin/LibvirtTool.pl b/testbot/bin/LibvirtTool.pl
index a4ae7df..fad0727 100755
--- a/testbot/bin/LibvirtTool.pl
+++ b/testbot/bin/LibvirtTool.pl
@@ -279,7 +279,20 @@ sub GetPrivilegedTA($)
   return $TA->SetTime() ? $TA : $VM->GetAgent(1);
 }
 
-sub ShutDown()
+=pod
+=over 12
+
+=item C<ShutDownIfOffSnapshot()>
+
+Attempt a clean shutdown of the VM if it is running a snapshot that requests
+them (snapshot name containing '-off').
+
+Returns 0 if the shutdown failed, 2 if it was successful and 1 if the VM was
+already powered off or a shutdown was not needed.
+=back
+=cut
+
+sub ShutDownIfOffSnapshot()
 {
   my $Domain = $VM->GetDomain();
   my $CurrentSnapshot = $Domain->GetSnapshotName();
@@ -310,7 +323,7 @@ sub ShutDown()
     {
       Debug(Elapsed($Start), " Successfully shut down $VMKey\n");
       LogMsg "Successfully shut down $VMKey\n";
-      return 1;
+      return 2;
     }
     sleep(1);
   }
@@ -364,7 +377,7 @@ sub Monitor()
     if ($IsReady and $VM->GetDomain()->IsPoweredOn())
     {
       # Try to perform a clean shutdown if requested
-      ShutDown();
+      ShutDownIfOffSnapshot();
 
       my $ErrMessage = $VM->GetDomain()->PowerOff();
       if (defined $ErrMessage)
@@ -390,7 +403,7 @@ sub Monitor()
 sub PowerOff()
 {
   # Try to perform a clean shutdown if requested
-  ShutDown();
+  ShutDownIfOffSnapshot();
 
   # Power off the VM no matter what its initial status is
   $CurrentStatus = $VM->Status;
@@ -430,7 +443,7 @@ sub CheckOff()
     if ($SnapshotName eq $VM->IdleSnapshot)
     {
       # Try to perform a clean shutdown if requested
-      ShutDown();
+      ShutDownIfOffSnapshot();
 
       my $ErrMessage = $VM->GetDomain()->PowerOff();
       FatalError("$ErrMessage\n") if (defined $ErrMessage);
@@ -611,8 +624,10 @@ sub Revert()
     $VM->Save();
   }
 
-  # Before reverting, try to perform a clean shutdown if requested
-  ShutDown();
+  # Before reverting, try to perform a clean shutdown if requested.
+  # After a shutdown a small wait is also sometimes required, at least when
+  # switching from a PCI-passthrough configuration to a regular one.
+  sleep(1) if (ShutDownIfOffSnapshot() == 2);
 
   # Revert the VM (and power it on if necessary)
   Debug(Elapsed($Start), " Reverting $VMKey to $DomainSnapshot\n");




More information about the wine-cvs mailing list