On Tue, Oct 11, 2016 at 8:14 AM, Larry Hastings <la...@hastings.org> wrote: > But I don't think this fixes the problem. Consider: > > Thread A calls Q = PyList_GetItem(L, 0), which returns a borrowed reference. > Thread A then gets suspended, before it has a chance to Py_INCREF(Q). > Thread B does L.clear(), the reference count of Q goes to 0, Q is added to > the doomed objects list. > Thread A gets to run again. It does Py_INCREF(Q); Q's refcount is now back > up to 1, as if Q had been resurrected. > At some point in the future the "memory deallocation lock" is released and Q > is deleted. > > If you say "well, just look at the reference count, and if it's 1 throw it > off the doomed objects list", keep in mind that I no longer have accurate > real-time reference counts. These hacks where we play games with the > reference count are mostly removed in my branch.
That's exactly what I would have said, because I was assuming that refcounts would be accurate. I'm not sure what you mean by "play games with", but it sounds like you have a much more sophisticated system going on than I had in my head, and you'll need a correspondingly sophisticated solution to this problem. Like I said, others have thought a LOT more about this than I have. ChrisA _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com