mirror of
https://github.com/python/cpython.git
synced 2025-08-22 01:35:16 +00:00
If you created a weakref in an object's __del__ method to itself it would
segfault the interpreter during weakref clean up. Now any new weakrefs created after __del__ is run are removed silently. Fixes bug #1377858 and the weakref_in_del crasher for new-style classes. Classic classes are still affected.
This commit is contained in:
parent
601d03a5be
commit
75ba075110
5 changed files with 33 additions and 1 deletions
|
@ -6,6 +6,8 @@ import weakref
|
|||
|
||||
from test import test_support
|
||||
|
||||
# Used in ReferencesTestCase.test_ref_created_during_del() .
|
||||
ref_from_del = None
|
||||
|
||||
class C:
|
||||
def method(self):
|
||||
|
@ -630,6 +632,18 @@ class ReferencesTestCase(TestBase):
|
|||
finally:
|
||||
gc.set_threshold(*thresholds)
|
||||
|
||||
def test_ref_created_during_del(self):
|
||||
# Bug #1377858
|
||||
# A weakref created in an object's __del__() would crash the
|
||||
# interpreter when the weakref was cleaned up since it would refer to
|
||||
# non-existent memory. This test should not segfault the interpreter.
|
||||
class Target(object):
|
||||
def __del__(self):
|
||||
global ref_from_del
|
||||
ref_from_del = weakref.ref(self)
|
||||
|
||||
w = Target()
|
||||
|
||||
|
||||
class SubclassableWeakrefTestCase(unittest.TestCase):
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue