[Python-Dev] PyWeakref_GetObject() borrows its reference from... whom? (original) (raw)
MRAB python at mrabarnett.plus.com
Mon Oct 10 12:49:35 EDT 2016
- Previous message (by thread): [Python-Dev] PyWeakref_GetObject() borrows its reference from... whom?
- Next message (by thread): [Python-Dev] PyWeakref_GetObject() borrows its reference from... whom?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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* PyListGetItem(PyObject *list, Pyssizet 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!
- Previous message (by thread): [Python-Dev] PyWeakref_GetObject() borrows its reference from... whom?
- Next message (by thread): [Python-Dev] PyWeakref_GetObject() borrows its reference from... whom?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]