[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] That xenstored console leak...

Here's what I'm using to fix it in 3.1. Obviously too risky for 3.2 now,
and anyway, there's a much more serious problem in 3.2 - entire /vm/
entries are leaked on domU reboot! I haven't got round to debugging that
one yet since it's not present in 3.1, but it really should be fixed


# HG changeset patch
# User john.levon@xxxxxxx
# Date 1200028523 28800
# Node ID 8a26f9a3f573a7c3b970f4349dd47fd4bf851df1
# Parent  c594cafb7e427e3b1f732a37c4b521f1e98dd08d
Cleanup xenstore after console device teardown

After the changes in 13616:b111908dd70b, DevController was leaking
xenstore entries every time we took down a console device, as there was
no equivalent to 'xenstore-rm -t' used in the hotplug scripts for "real"
devices. Implement the moral equivalent whenever removal is forced.

Signed-off-by: John Levon <john.levon@xxxxxxx>

diff --git a/tools/python/xen/xend/server/DevController.py 
--- a/tools/python/xen/xend/server/DevController.py
+++ b/tools/python/xen/xend/server/DevController.py
@@ -231,11 +231,21 @@ class DevController:
         self.writeBackend(dev, 'state', str(xenbusState['Closing']))
         if force:
-            frontpath = self.frontendPath(dev)
-            backpath = xstransact.Read(frontpath, "backend")
-            if backpath:
-                xstransact.Remove(backpath)
-            xstransact.Remove(frontpath)
+            try:
+                frontpath = self.frontendPath(dev)
+                t = xstransact()
+                backpath = t.read("%s/backend" % frontpath)
+                if backpath:
+                    t.remove(backpath)
+                    # tidy up empty directories
+                    while not t.list(backpath):
+                        t.remove(backpath)
+                        backpath = os.path.dirname(backpath)
+                t.remove(frontpath)
+                t.commit()
+            except:
+                t.abort()
+                raise
         self.vm._removeVm("device/%s/%d" % (self.deviceClass, dev))

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.