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

[Xen-changelog] [xen-3.1-testing] Cleanup xenstore after console device teardown



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1200395954 0
# Node ID 0918b4bbffbb5235b6f6c8860b38b928da3595d2
# Parent  afd468fb5730d7760c68cb6eb4cadf0e2cf2530e
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>
---
 tools/python/xen/xend/server/DevController.py |   22 +++++++++++++++++-----
 1 files changed, 17 insertions(+), 5 deletions(-)

diff -r afd468fb5730 -r 0918b4bbffbb 
tools/python/xen/xend/server/DevController.py
--- a/tools/python/xen/xend/server/DevController.py     Tue Jan 15 11:16:18 
2008 +0000
+++ b/tools/python/xen/xend/server/DevController.py     Tue Jan 15 11:19:14 
2008 +0000
@@ -231,11 +231,23 @@ 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)
+                while True:
+                    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)
+                    if t.commit():
+                        break
+            except:
+                t.abort()
+                raise
 
         self.vm._removeVm("device/%s/%d" % (self.deviceClass, dev))
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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