mirror of https://github.com/python/cpython
3459251d5a
helper macros to something saner, and used them appropriately in other files too, to reduce #ifdef blocks. classobject.c, instance_dealloc(): One of my worst Python Memories is trying to fix this routine a few years ago when COUNT_ALLOCS was defined but Py_TRACE_REFS wasn't. The special-build code here is way too complicated. Now it's much simpler. Difference: in a Py_TRACE_REFS build, the instance is no longer in the doubly-linked list of live objects while its __del__ method is executing, and that may be visible via sys.getobjects() called from a __del__ method. Tough -- the object is presumed dead while its __del__ is executing anyway, and not calling _Py_NewReference() at the start allows enormous code simplification. typeobject.c, call_finalizer(): The special-build instance_dealloc() pain apparently spread to here too via cut-'n-paste, and this is much simpler now too. In addition, I didn't understand why this routine was calling _PyObject_GC_TRACK() after a resurrection, since there's no plausible way _PyObject_GC_UNTRACK() could have been called on the object by this point. I suspect it was left over from pasting the instance_delloc() code. Instead asserted that the object is still tracked. Caution: I suspect we don't have a test that actually exercises the subtype_dealloc() __del__-resurrected-me code. |
||
---|---|---|
.. | ||
Python.h | ||
abstract.h | ||
bitset.h | ||
boolobject.h | ||
bufferobject.h | ||
cStringIO.h | ||
cellobject.h | ||
ceval.h | ||
classobject.h | ||
cobject.h | ||
codecs.h | ||
compile.h | ||
complexobject.h | ||
descrobject.h | ||
dictobject.h | ||
enumobject.h | ||
errcode.h | ||
eval.h | ||
fileobject.h | ||
floatobject.h | ||
frameobject.h | ||
funcobject.h | ||
graminit.h | ||
grammar.h | ||
import.h | ||
intobject.h | ||
intrcheck.h | ||
iterobject.h | ||
listobject.h | ||
longintrepr.h | ||
longobject.h | ||
marshal.h | ||
metagrammar.h | ||
methodobject.h | ||
modsupport.h | ||
moduleobject.h | ||
node.h | ||
object.h | ||
objimpl.h | ||
opcode.h | ||
osdefs.h | ||
parsetok.h | ||
patchlevel.h | ||
pgenheaders.h | ||
py_curses.h | ||
pydebug.h | ||
pyerrors.h | ||
pyfpe.h | ||
pygetopt.h | ||
pymactoolbox.h | ||
pymem.h | ||
pyport.h | ||
pystate.h | ||
pythonrun.h | ||
pythread.h | ||
rangeobject.h | ||
sliceobject.h | ||
stringobject.h | ||
structmember.h | ||
structseq.h | ||
symtable.h | ||
sysmodule.h | ||
token.h | ||
traceback.h | ||
tupleobject.h | ||
ucnhash.h | ||
unicodeobject.h | ||
weakrefobject.h |