Merged revisions 71860 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r71860 | benjamin.peterson | 2009-04-24 19:41:22 -0500 (Fri, 24 Apr 2009) | 1 line fix a segfault when setting __class__ in __del__ #5283 ........
This commit is contained in:
parent
50101def6e
commit
af75a5f247
|
@ -2959,6 +2959,16 @@ order (MRO) for bases """
|
|||
continue
|
||||
cant(cls(), cls2)
|
||||
|
||||
# Issue5283: when __class__ changes in __del__, the wrong
|
||||
# type gets DECREF'd.
|
||||
class O(object):
|
||||
pass
|
||||
class A(object):
|
||||
def __del__(self):
|
||||
self.__class__ = O
|
||||
l = [A() for x in range(100)]
|
||||
del l
|
||||
|
||||
def test_set_dict(self):
|
||||
# Testing __dict__ assignment...
|
||||
class C(object): pass
|
||||
|
|
|
@ -15,6 +15,8 @@ Core and Builtins
|
|||
- Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on
|
||||
some builtin types.
|
||||
|
||||
- Issue #5283: Setting __class__ in __del__ caused a segfault.
|
||||
|
||||
- Issue #5759: float() didn't call __float__ on str subclasses.
|
||||
|
||||
Library
|
||||
|
|
|
@ -928,6 +928,9 @@ subtype_dealloc(PyObject *self)
|
|||
assert(base);
|
||||
}
|
||||
|
||||
/* Extract the type again; tp_del may have changed it */
|
||||
type = Py_TYPE(self);
|
||||
|
||||
/* Call the base tp_dealloc() */
|
||||
assert(basedealloc);
|
||||
basedealloc(self);
|
||||
|
@ -1009,6 +1012,9 @@ subtype_dealloc(PyObject *self)
|
|||
}
|
||||
}
|
||||
|
||||
/* Extract the type again; tp_del may have changed it */
|
||||
type = Py_TYPE(self);
|
||||
|
||||
/* Call the base tp_dealloc(); first retrack self if
|
||||
* basedealloc knows about gc.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue