From: Keir Fraser Date: Fri, 25 Jan 2008 13:29:51 +0000 (+0000) Subject: Fix leaking of /vm/ path in xenstore on various VM lifecycle events. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14403 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=2787b8a48d7f242fa1dd828db9cf568a622e043d;p=xen.git Fix leaking of /vm/ path in xenstore on various VM lifecycle events. Signed-off-by: Jim Fehlig --- diff --git a/tools/python/xen/xend/XendCheckpoint.py b/tools/python/xen/xend/XendCheckpoint.py index 60492318c6..d3b409f7de 100644 --- a/tools/python/xen/xend/XendCheckpoint.py +++ b/tools/python/xen/xend/XendCheckpoint.py @@ -125,10 +125,10 @@ def save(fd, dominfo, network, live, dst, checkpoint=False): if checkpoint: dominfo.resumeDomain() else: - dominfo.destroyDomain() + dominfo.destroy() dominfo.testDeviceComplete() try: - dominfo.setName(domain_name) + dominfo.setName(domain_name, False) except VmError: # Ignore this. The name conflict (hopefully) arises because we # are doing localhost migration; if we are doing a suspend of a diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index c605f211e1..7d0c43fc48 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -1125,10 +1125,11 @@ class XendDomainInfo: def getDomid(self): return self.domid - def setName(self, name): + def setName(self, name, to_store = True): self._checkName(name) self.info['name_label'] = name - self.storeVm("name", name) + if to_store: + self.storeVm("name", name) def getName(self): return self.info['name_label'] @@ -1399,7 +1400,7 @@ class XendDomainInfo: new_dom_info = self._preserveForRestart() else: self._unwatchVm() - self.destroyDomain() + self.destroy() # new_dom's VM will be the same as this domain's VM, except where # the rename flag has instructed us to call preserveForRestart. @@ -1413,9 +1414,6 @@ class XendDomainInfo: new_dom_info) new_dom.waitForDevices() new_dom.unpause() - rst_cnt = self._readVm('xend/restart_count') - rst_cnt = int(rst_cnt) + 1 - self._writeVm('xend/restart_count', str(rst_cnt)) new_dom._removeVm(RESTART_IN_PROGRESS) except: if new_dom: @@ -1441,13 +1439,19 @@ class XendDomainInfo: new_name, new_uuid) self._unwatchVm() self._releaseDevices() + # Remove existing vm node in xenstore + self._removeVm() new_dom_info = self.info.copy() new_dom_info['name_label'] = self.info['name_label'] new_dom_info['uuid'] = self.info['uuid'] self.info['name_label'] = new_name self.info['uuid'] = new_uuid self.vmpath = XS_VMROOT + new_uuid + # Write out new vm node to xenstore self._storeVmDetails() + rst_cnt = self._readVm('xend/restart_count') + rst_cnt = int(rst_cnt) + 1 + self._writeVm('xend/restart_count', str(rst_cnt)) self._preserve() return new_dom_info