2009-08-17 14:57:35 +02:00
|
|
|
# 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
|
|
|
|
|
2009-08-31 21:24:23 +02:00
|
|
|
Index: xen-3.4.1-testing/tools/python/xen/xend/XendStateStore.py
|
|
|
|
===================================================================
|
|
|
|
--- xen-3.4.1-testing.orig/tools/python/xen/xend/XendStateStore.py
|
|
|
|
+++ xen-3.4.1-testing/tools/python/xen/xend/XendStateStore.py
|
|
|
|
@@ -147,6 +147,7 @@ class XendStateStore:
|
2009-08-17 14:57:35 +02:00
|
|
|
cls_dict[val_name] = bool(int(val_text))
|
|
|
|
state[uuid] = cls_dict
|
|
|
|
|
|
|
|
+ dom.unlink()
|
|
|
|
return state
|
|
|
|
|
|
|
|
def save_state(self, cls, state):
|
2009-08-31 21:24:23 +02:00
|
|
|
@@ -226,5 +227,5 @@ class XendStateStore:
|
2009-08-17 14:57:35 +02:00
|
|
|
node.appendChild(val_node)
|
|
|
|
|
|
|
|
open(xml_path, 'w').write(doc.toprettyxml())
|
|
|
|
-
|
|
|
|
+ doc.unlink()
|
|
|
|
|