]> granicus.if.org Git - python/commitdiff
Backed out changeset 78bf34b6a713
authorSerhiy Storchaka <storchaka@gmail.com>
Wed, 28 Dec 2016 07:23:17 +0000 (09:23 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Wed, 28 Dec 2016 07:23:17 +0000 (09:23 +0200)
Lib/test/test_xml_etree_c.py
Misc/NEWS
Modules/_elementtree.c

index 8d9bd17a19a6ae7d386324a50096644445a888ad..98410c55a66edb52486ae711a4603e2eae2490f2 100644 (file)
@@ -17,7 +17,6 @@ def sanity():
     """
 
 
-@unittest.skipUnless(cET, 'requires _elementtree')
 class MiscTests(unittest.TestCase):
     # Issue #8651.
     @precisionbigmemtest(size=_2G + 100, memuse=1)
@@ -63,22 +62,12 @@ class MiscTests(unittest.TestCase):
             del element.attrib
         self.assertEqual(element.attrib, {'A': 'B', 'C': 'D'})
 
-    def test_trashcan(self):
-        # If this test fails, it will most likely die via segfault.
-        e = root = cET.Element('root')
-        for i in range(200000):
-            e = cET.SubElement(e, 'x')
-        del e
-        del root
-        test_support.gc_collect()
-
 
 def test_main():
     from test import test_xml_etree, test_xml_etree_c
 
     # Run the tests specific to the C implementation
     test_support.run_doctest(test_xml_etree_c, verbosity=True)
-    test_support.run_unittest(MiscTests)
 
     # Assign the C implementation before running the doctests
     # Patch the __name__, to prevent confusion with the pure Python test
index 57e4838e4bbc655ec5c89ebd7dd8e03b1f5b0afd..8b9ef4861330d9e0710cc972cbd04f478a982c4e 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -26,8 +26,6 @@ Library
 - Issue #29019: Fix dict.fromkeys(x) overallocates when x is sparce dict.
   Original patch by Rasmus Villemoes.
 
-- Issue #28871: Fixed a crash when deallocate deep ElementTree.
-
 - Issue #19542: Fix bugs in WeakValueDictionary.setdefault() and
   WeakValueDictionary.pop() when a GC collection happens in another
   thread.
index 8e5b5877030afa70aa606830e175d792769b5cc9..b01167b8a08e6257bb804d808265d7f269701bec 100644 (file)
@@ -121,18 +121,6 @@ typedef int Py_ssize_t;
 #define JOIN_SET(p, flag) ((void*) ((Py_uintptr_t) (JOIN_OBJ(p)) | (flag)))
 #define JOIN_OBJ(p) ((PyObject*) ((Py_uintptr_t) (p) & ~1))
 
-/* Py_CLEAR for a PyObject* that uses a join flag. Pass the pointer by
- * reference since this function sets it to NULL.
-*/
-static void _clear_joined_ptr(PyObject **p)
-{
-    if (*p) {
-        PyObject *tmp = JOIN_OBJ(*p);
-        *p = NULL;
-        Py_DECREF(tmp);
-    }
-}
-
 /* glue functions (see the init function for details) */
 static PyObject* elementtree_parseerror_obj;
 static PyObject* elementtree_copyelement_obj;
@@ -550,20 +538,17 @@ subelement(PyObject* self, PyObject* args, PyObject* kw)
 static void
 element_dealloc(ElementObject* self)
 {
-    Py_TRASHCAN_SAFE_BEGIN(self)
+    if (self->extra)
+        element_dealloc_extra(self);
 
     /* discard attributes */
     Py_DECREF(self->tag);
-    _clear_joined_ptr(&self->text);
-    _clear_joined_ptr(&self->tail);
-
-    if (self->extra)
-        element_dealloc_extra(self);
+    Py_DECREF(JOIN_OBJ(self->text));
+    Py_DECREF(JOIN_OBJ(self->tail));
 
     RELEASE(sizeof(ElementObject), "destroy element");
 
     PyObject_Del(self);
-    Py_TRASHCAN_SAFE_END(self)
 }
 
 /* -------------------------------------------------------------------- */