On Fri, Mar 23, 2001 at 01:50:21AM -0500, Fred L. Drake, Jr. wrote: > The change that's been identified as causing the problem was > trying to remove the weak ref from the cycle detectors set of > known containers as soon as the ref object was no longer a > container. I'm not sure what you mean by "no longer a container". If the object defines the GC type flag the GC thinks its a container. > When this is done by the tp_clear handler may be the problem; > the GC machinery is removing the object from the list, and > calls gc_list_remove() assuming that the object is still in the > list, but after the tp_clear handler has been called. I believe your problems are deeper than this. If PyObject_IS_GC(op) is true and op is reachable from other objects known to the GC then op must be in the linked list. I haven't tracked down all the locations in gcmodule where this assumption is made but visit_reachable is one example. We could remove this restriction if we were willing to accept some slowdown. One way would be to add the invariant (gc_next == NULL) if the object is not in the GC list. PyObject_Init and gc_list_remove would have to set this pointer. Is it worth doing? Neil
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4