mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
Issue #25395: Fixed crash when highly nested OrderedDict structures were
garbage collected.
This commit is contained in:
parent
964ec8b2f3
commit
14eefe353e
3 changed files with 41 additions and 3 deletions
|
|
@ -2025,6 +2025,30 @@ class OrderedDictTests:
|
|||
items = [('a', 1), ('c', 3), ('b', 2)]
|
||||
self.assertEqual(list(MyOD(items).items()), items)
|
||||
|
||||
def test_highly_nested(self):
|
||||
# Issue 25395: crashes during garbage collection
|
||||
OrderedDict = self.module.OrderedDict
|
||||
obj = None
|
||||
for _ in range(1000):
|
||||
obj = OrderedDict([(None, obj)])
|
||||
del obj
|
||||
support.gc_collect()
|
||||
|
||||
def test_highly_nested_subclass(self):
|
||||
# Issue 25395: crashes during garbage collection
|
||||
OrderedDict = self.module.OrderedDict
|
||||
deleted = []
|
||||
class MyOD(OrderedDict):
|
||||
def __del__(self):
|
||||
deleted.append(self.i)
|
||||
obj = None
|
||||
for i in range(100):
|
||||
obj = MyOD([(None, obj)])
|
||||
obj.i = i
|
||||
del obj
|
||||
support.gc_collect()
|
||||
self.assertEqual(deleted, list(reversed(range(100))))
|
||||
|
||||
|
||||
class PurePythonOrderedDictTests(OrderedDictTests, unittest.TestCase):
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue