xend: Fix file resouce leak on resume of suspended managed domains.
authorKeir Fraser <keir@xensource.com>
Fri, 12 Oct 2007 13:30:41 +0000 (14:30 +0100)
committerKeir Fraser <keir@xensource.com>
Fri, 12 Oct 2007 13:30:41 +0000 (14:30 +0100)
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 <gary.pennington@sun.com>
tools/python/xen/xend/XendDomain.py

index 130ae1e8beb61d30f1fc2689c3da81c486004170..eb75da59ecd79d84df8d07b57dbb1f06a3e889a7 100644 (file)
@@ -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()