Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32k
gh-112075: Add try-incref functions from nogil branch for use in dict thread safety#114512
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
9318df9
to818fc5f
CompareUh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Include/internal/pycore_object.h Outdated
/* Tries to incref the object op and ensures that *src still points to it. */ | ||
static inline int | ||
_Py_TryAcquireObject(PyObject **src, PyObject *op) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I don't love this name, but I don't know what it should be called.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I don't really have a better name either :P
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Maybe just_Py_TryIncref()
? Also maybe renamesrc
toptr
for consistency with the other functions here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
A few minor suggestions, but otherwise LGTM.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Include/internal/pycore_object.h Outdated
/* Tries to incref the object op and ensures that *src still points to it. */ | ||
static inline int | ||
_Py_TryAcquireObject(PyObject **src, PyObject *op) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Maybe just_Py_TryIncref()
? Also maybe renamesrc
toptr
for consistency with the other functions here.
colesbury/nogil@b6b12a9a94eCo-Authored-By: Sam Gross <colesbury@gmail.com>
…n dict thread safety (python#114512)* Bring in a subset of biased reference counting:colesbury/nogil@b6b12a9a94eThe NoGIL branch has functions for attempting to do an incref on an object which may or may not be in flight. This just brings those functions over so that they will be usable from in the dict implementation to get items w/o holding a lock.There's a handful of small simple modifications: Adding inline to the force inline functions to avoid a warning, and switching from _Py_ALWAYS_INLINE to Py_ALWAYS_INLINE as that's available Remove _Py_REF_LOCAL_SHIFT as it doesn't exist yet (and is currently 0 in the 3.12 nogil branch anyway) ob_ref_shared is currently Py_ssize_t and not uint32_t, so use that _PY_LIKELY doesn't exist, so drop it _Py_ThreadLocal becomes _Py_IsOwnedByCurrentThread Add '_PyInterpreterState_GET()' to _Py_IncRefTotal calls.Co-Authored-By: Sam Gross <colesbury@gmail.com>
…n dict thread safety (python#114512)* Bring in a subset of biased reference counting:colesbury/nogil@b6b12a9a94eThe NoGIL branch has functions for attempting to do an incref on an object which may or may not be in flight. This just brings those functions over so that they will be usable from in the dict implementation to get items w/o holding a lock.There's a handful of small simple modifications: Adding inline to the force inline functions to avoid a warning, and switching from _Py_ALWAYS_INLINE to Py_ALWAYS_INLINE as that's available Remove _Py_REF_LOCAL_SHIFT as it doesn't exist yet (and is currently 0 in the 3.12 nogil branch anyway) ob_ref_shared is currently Py_ssize_t and not uint32_t, so use that _PY_LIKELY doesn't exist, so drop it _Py_ThreadLocal becomes _Py_IsOwnedByCurrentThread Add '_PyInterpreterState_GET()' to _Py_IncRefTotal calls.Co-Authored-By: Sam Gross <colesbury@gmail.com>
Uh oh!
There was an error while loading.Please reload this page.
The NoGIL branch has functions for attempting to do an incref on an object which may or may not be in flight. This just brings those functions over so that they will be usable from in the dict implementation to get items w/o holding a lock.
There's a handful of small simple modifications:
inline
to the force inline functions to avoid a warning, and switching from_Py_ALWAYS_INLINE
toPy_ALWAYS_INLINE
as that's available_Py_REF_LOCAL_SHIFT
as it doesn't exist yet (and is currently 0 in the 3.12 nogil branch anyway)ob_ref_shared
is currentlyPy_ssize_t
and not uint32_t, so use that_PY_LIKELY
doesn't exist, so drop it_Py_ThreadLocal
becomes_Py_IsOwnedByCurrentThread
_Py_IncRefTotal
calls.dict
objects thread-safe in--disable-gil
builds #112075