[Patches] [ python-Patches-843455 ] Make weakref callbacks play
nice in gc
SourceForge.net
noreply at sourceforge.net
Sun Nov 16 22:18:19 EST 2003
Patches item #843455, was opened at 2003-11-16 22:18
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=843455&group_id=5470
Category: Core (C code)
Group: Python 2.4
Status: Open
Resolution: None
Priority: 9
Submitted By: Tim Peters (tim_one)
Assigned to: Neil Schemenauer (nascheme)
Summary: Make weakref callbacks play nice in gc
Initial Comment:
See bug 839548. Weakref callbacks attached to objects
in dead cycles can see objects that have gone thru
tp_clear() now, and can resurrect such objects too. A
wide variety of bad things can result, up to and including
segfaults.
This implements a scheme I detailed on Python-Dev to
teach gc about the bad things callbacks can do, still
calling them, but ensuring that a callback can't reach
any objects on which tp_clear has been invoked. If a
callback happens to resurrect an object, tp_clear won't
get invoked on the latter object at all by gc. This keeps
Python-visible objects wholly sane, and even
unsurprising.
If this patch is accepted, I'll also check in a plain-text
file with a version of the Python-Dev msg explaining the
scheme.
Neal, I most want your eyeballs on this, since you know
the most about gc's design. Please assign to Fred when
you're done (whether or not you can make time),
because I want his eyeballs on the weakref changes.
Two changes were made to the weakref
implementation: (1) a new private API function
_PyWeakref_HasCallback(), so gc can determine which
objects have associated weakref callbacks; and, (2)
because objects in cyclic trash don't have refcount 0, I
had to remove the refcnt==0 check from
PyObject_ClearWeakRefs(). Maybe it would be better to
introduce a workalike private function that skipped that
one check, and leave the public function alone?
When reviewing this, note that it has to be backported
to the 2.3 line too: 2.3.2 is the release in which Jim
Fulton first saw segfaults in real life.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=843455&group_id=5470
More information about the Patches
mailing list