xend: fix memory leak resulting in long garbage collector runs

In the method xen.xend.XendStateStore.XendStateStore.load_state and
xen.xend.XendStateStore.XendStateStore.save_state the minidom objects
used to load/save the current state of a device type, can't be freed
by the python garbage collector after all references to the top node
are cleared, because of cyclic references between the DOM nodes. So
memory usage of xend increases after calling these methods.  To solve
this problem, the unlink() method must be called for a minidom object
before the last reference to the top node is cleared (see python
docs). This breaks the cyclic references, so the garbage collector can
free these objects.

Signed-off-by: juergen.gross@ts.fujitsu.com
This commit is contained in:
Keir Fraser committed 2009-08-05 12:04:39 +01:00
1 parent ce09aeeba7
commit f275a935a2
1 file changed
+2 -1
+2 -1
View File
@@ -147,6 +147,7 @@ class XendStateStore:
cls_dict[val_name] = bool(int(val_text))
state[uuid] = cls_dict
dom.unlink()
return state
def save_state(self, cls, state):
@@ -226,5 +227,5 @@ class XendStateStore:
node.appendChild(val_node)
open(xml_path, 'w').write(doc.toprettyxml())
doc.unlink()
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.