From 0eb21691361ccb9d30b10114016423e0d0defdd8 Mon Sep 17 00:00:00 2001 From: Stefan Reiter Date: Mon, 24 Jun 2019 10:33:07 +0200 Subject: [PATCH] fix #2244: Allow timeout for guest-agent shutdown The "guest-shutdown" guest agent call is blocking for some reason, so if it fails (e.g. agent not installed on guest) only the default timeout of 10 minutes (see QMPClient.pm, sub cmd) would apply. With this change, if (and only if) a timeout is specified via CLI/API, it is used instead. In case it is not specified, behaviour stays the same (default 10 min timeout). Signed-off-by: Stefan Reiter --- PVE/QemuServer.pm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index e8e1909e..ed11609b 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -5646,12 +5646,13 @@ sub vm_stop { PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'pre-stop'); } - $timeout = 60 if !defined($timeout); - eval { if ($shutdown) { if (defined($conf) && parse_guest_agent($conf)->{enabled}) { - vm_qmp_command($vmid, { execute => "guest-shutdown" }, $nocheck); + vm_qmp_command($vmid, { + execute => "guest-shutdown", + arguments => { timeout => $timeout } + }, $nocheck); } else { vm_qmp_command($vmid, { execute => "system_powerdown" }, $nocheck); } @@ -5662,6 +5663,8 @@ sub vm_stop { my $err = $@; if (!$err) { + $timeout = 60 if !defined($timeout); + my $count = 0; while (($count < $timeout) && check_running($vmid, $nocheck)) { $count++;