39 lines
1.5 KiB
Diff
39 lines
1.5 KiB
Diff
# HG changeset patch
|
|
# User Keir Fraser <keir.fraser@citrix.com>
|
|
# Date 1249470279 -3600
|
|
# Node ID e41d42ef4cd2968cd480063a3c82d91c38cb8c7d
|
|
# Parent 3242351f9c6766fe4fbc27d969b1b84a9926cbda
|
|
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
|
|
|
|
diff -r 3242351f9c67 -r e41d42ef4cd2 tools/python/xen/xend/XendStateStore.py
|
|
--- a/tools/python/xen/xend/XendStateStore.py Wed Aug 05 12:03:53 2009 +0100
|
|
+++ b/tools/python/xen/xend/XendStateStore.py Wed Aug 05 12:04:39 2009 +0100
|
|
@@ -147,6 +147,7 @@
|
|
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 @@
|
|
node.appendChild(val_node)
|
|
|
|
open(xml_path, 'w').write(doc.toprettyxml())
|
|
-
|
|
+ doc.unlink()
|
|
|