[Python-Dev] [Python-checkins] cpython: Issue #14065: Added cyclic GC support to ET.Element (original) (raw)
Benjamin Peterson benjamin at python.org
Fri Mar 30 21:30:59 CEST 2012
- Previous message: [Python-Dev] Issue 14417: consequences of new dict runtime error
- Next message: [Python-Dev] [Python-checkins] cpython: Issue #14065: Added cyclic GC support to ET.Element
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
2012/3/30 eli.bendersky <python-checkins at python.org>:
http://hg.python.org/cpython/rev/0ca32013d77e changeset: 75997:0ca32013d77e parent: 75995:cf2e74e0b7d4 user: Eli Bendersky <eliben at gmail.com> date: Fri Mar 30 16:38:33 2012 +0300 summary: Issue #14065: Added cyclic GC support to ET.Element
files: Lib/test/testxmletree.py | 27 ++++++++++- Modules/elementtree.c | 63 +++++++++++++++++++------ 2 files changed, 74 insertions(+), 16 deletions(-)
diff --git a/Lib/test/testxmletree.py b/Lib/test/testxmletree.py --- a/Lib/test/testxmletree.py +++ b/Lib/test/testxmletree.py @@ -14,9 +14,10 @@ # Don't re-import "xml.etree.ElementTree" module in the docstring, # except if the test is specific to the Python implementation. -import sys +import gc import html import io +import sys import unittest from test import support @@ -1846,6 +1847,30 @@ self.assertRaises(TypeError, e.extend, [ET.Element('bar'), 'foo']) self.assertRaises(TypeError, e.insert, 0, 'foo') + def testcyclicgc(self): + class ShowGC: + def init(self, flaglist): + self.flaglist = flaglist + def del(self): + self.flaglist.append(1)
I think a nicer way to check for cyclic collection is to take a weakref to an object, call the GC, then check to make sure the weakref is broken.
+ + # Test the shortest cycle: lst->element->lst + fl = [] + lst = [ShowGC(fl)] + lst.append(ET.Element('joe', attr=lst)) + del lst + gc.collect()
support.gc_collect() is preferable
+ self.assertEqual(fl, [1]) + + # A longer cycle: lst->e->e2->lst + fl = [] + e = ET.Element('joe') + lst = [ShowGC(fl), e] + e2 = ET.SubElement(e, 'foo', attr=lst) + del lst, e, e2 + gc.collect() + self.assertEqual(fl, [1])
-- Regards, Benjamin
- Previous message: [Python-Dev] Issue 14417: consequences of new dict runtime error
- Next message: [Python-Dev] [Python-checkins] cpython: Issue #14065: Added cyclic GC support to ET.Element
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]