[Python-Dev] Re: weakref callback vs gc vs threads
Neil Schemenauer
nas at arctrix.com
Fri Oct 29 19:24:34 CEST 2004
[Taking this to email. Carrying out discussions via the SF bug tracker
sucks.]
Comment By: Tim Peters (tim_one)
> [Neil]
> > I had to change _PyWeakref_ClearRef() since it was also
> > clearing the weakref list of the trash object.
>
> That was really its *purpose*. If a trash weakref with a
> callback isn't removed from the referent's list of weakrefs,
> then the callback will trigger when PyObject_ClearWeakRefs()
> is invoked on the referent. The purpose of
> _PyWeakref_ClearRef() was to ensure that the callback never
> triggers.
But it's okay of the callback triggers, as long as the callback
doesn't reference trash.
> > Now it just sets wr_object to Py_None.
>
> That won't stop the callback from triggering. It also means
> (see earlier comment) that PyObject_ClearWeakRefs() will
> never removed the weakref from the list either, although I'm
> not sure that does real harm.
I'm trying to figure out PyObject_ClearWeakRefs() right now.
> > I also made some serious simplifications to gcmodule by
> > just treating trash weakref objects with callbacks the same
> > as objects with __del__ methods (i.e. move them to the
> > finalizers list and then do the transitive closure of that set).
>
> Does that mean they can end up in gc.garbage too? If so, I
> don't think that's sellable.
I think so. That can be easily changed though. What we can't do is
invoke those callbacks.
Neil
More information about the Python-Dev
mailing list