On 2016-10-10 10:45, Chris Angelico wrote: > On Mon, Oct 10, 2016 at 8:35 PM, Larry Hastings <larry at hastings.org> wrote: >> Huh? In all other circumstances, a "borrowed" reference is exactly that: X >> has a reference, and you are relying on X's reference to keep the object >> alive. Borrowing from a borrowed reference is simply a chain of these; Z >> borrows from Y, Y borrows from X, and X is the original person who did the >> incref. But you're borrowing from something specific, somebody who the API >> guarantees has a legitimate reference on the object and won't drop it while >> you're using it. I bet for every other spot in the API I can tell you from >> whom you're borrowing the reference. > > Okay. Here's a test: > > PyObject* PyList_GetItem(PyObject *list, Py_ssize_t index) > Return value: Borrowed reference. > > Presumably you own a reference to the list itself before you call > this, and the list has a reference to its items. But suppose another > thread clear()s the list immediately after you call this; whose > reference are you borrowing now? The list's is gone. > > Or is this another API that will have to change post gilectomy? > Couldn't the reference to the list also be borrowed? If you lookup something in a dict, it'll be a borrowed reference. If the dict is globals() and there's no GIL, another thread could delete the item while your code had the borrowed reference. It looks like there might be a lot that will need to changed post gilectomy!
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