Francesco Romani has uploaded a new change for review.
Change subject: vm: fix race in shutdown reason reporting
......................................................................
vm: fix race in shutdown reason reporting
This patch fix a race in the reporting of
the shutdown exit reason.
Change-Id: I69944134aa9c6f6b3cc40998857ac96540cf9d52
Relates-To:
https://bugzilla.redhat.com/557125
Signed-off-by: Francesco Romani <fromani(a)redhat.com>
---
M vdsm/virt/vm.py
1 file changed, 13 insertions(+), 7 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/97/31797/1
diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index e7f91ec..c76c155 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -1572,6 +1572,7 @@
self._powerDownEvent = threading.Event()
self._liveMergeCleanupThreads = {}
self._shutdownReason = None
+ self._shutdownLock = threading.Lock()
def _get_lastStatus(self):
PAUSED_STATES = (vmstatus.POWERING_DOWN, vmstatus.REBOOT_IN_PROGRESS,
@@ -1995,10 +1996,12 @@
# state
response = self.releaseVm()
if not response['status']['code']:
- if self._shutdownReason is None:
+ with self._shutdownLock:
+ reason = self._shutdownReason
+ if reason is None:
self.setDownStatus(ERROR, vmexitreason.LOST_QEMU_CONNECTION)
else:
- self.setDownStatus(NORMAL, self._shutdownReason)
+ self.setDownStatus(NORMAL, reason)
self._powerDownEvent.set()
def _loadCorrectedTimeout(self, base, doubler=20, load=None):
@@ -4657,13 +4660,15 @@
dev.custom)
hooks.before_vm_destroy(self._lastXMLDesc, self.conf)
- self._shutdownReason = vmexitreason.ADMIN_SHUTDOWN
+ with self._shutdownLock:
+ self._shutdownReason = vmexitreason.ADMIN_SHUTDOWN
self._destroyed = True
return self.releaseVm()
def acpiShutdown(self):
- self._shutdownReason = vmexitreason.ADMIN_SHUTDOWN
+ with self._shutdownLock:
+ self._shutdownReason = vmexitreason.ADMIN_SHUTDOWN
self._dom.shutdownFlags(libvirt.VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN)
def setBalloonTarget(self, target):
@@ -5209,9 +5214,10 @@
hooks.after_vm_hibernate(self._lastXMLDesc, self.conf)
else:
if detail == libvirt.VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN:
- if self._shutdownReason is None:
- # do not overwrite admin shutdown, if present
- self._shutdownReason = vmexitreason.USER_SHUTDOWN
+ with self._shutdownLock:
+ if self._shutdownReason is None:
+ # do not overwrite admin shutdown, if present
+ self._shutdownReason = vmexitreason.USER_SHUTDOWN
self._onQemuDeath()
elif event == libvirt.VIR_DOMAIN_EVENT_SUSPENDED:
self._guestCpuRunning = False
--
To view, visit
http://gerrit.ovirt.org/31797
To unsubscribe, visit
http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I69944134aa9c6f6b3cc40998857ac96540cf9d52
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Francesco Romani <fromani(a)redhat.com>