From: Keir Fraser Date: Fri, 12 Oct 2007 13:30:41 +0000 (+0100) Subject: xend: Fix file resouce leak on resume of suspended managed domains. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14847^2~49 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e972f8be188f10d70266d3e1b3735a57dbd23b44;p=xen.git xend: Fix file resouce leak on resume of suspended managed domains. When a suspended managed domain is resumed, the checkpoint file is removed, but xend retains a reference to the removed file. This represents a resource leak. Fixed by ensuring that the file reference is closed correctly. Signed-off-by: Gary Pennington --- diff --git a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py index 130ae1e8be..eb75da59ec 100644 --- a/tools/python/xen/xend/XendDomain.py +++ b/tools/python/xen/xend/XendDomain.py @@ -886,6 +886,7 @@ class XendDomain: self.domains_lock.acquire() try: try: + fd = None dominfo = self.domain_lookup_nr(domname) if not dominfo: @@ -908,8 +909,9 @@ class XendDomain: oflags = os.O_RDONLY if hasattr(os, "O_LARGEFILE"): oflags |= os.O_LARGEFILE + fd = os.open(chkpath, oflags) XendCheckpoint.restore(self, - os.open(chkpath, oflags), + fd, dominfo, paused = start_paused) os.unlink(chkpath) @@ -921,6 +923,8 @@ class XendDomain: log.exception("Exception occurred when resuming") raise XendError("Error occurred when resuming: %s" % str(ex)) finally: + if fd is not None: + os.close(fd) self.domains_lock.release()