-
-
Notifications
You must be signed in to change notification settings - Fork 33.7k
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 our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
9318df9 to
818fc5f
Compare
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 rename src to ptr for consistency with the other functions here.
818fc5f to
3e50cbe
Compare
colesbury
left a comment
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.
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 rename src to ptr for consistency with the other functions here.
3e50cbe to
d5fe7a1
Compare
colesbury/nogil@b6b12a9a94e Co-Authored-By: Sam Gross <[email protected]>
d5fe7a1 to
87e9465
Compare
…n dict thread safety (python#114512) * Bring in a subset of biased reference counting: colesbury/nogil@b6b12a9a94e 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: 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 <[email protected]>
…n dict thread safety (python#114512) * Bring in a subset of biased reference counting: colesbury/nogil@b6b12a9a94e 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: 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 <[email protected]>
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:
inlineto the force inline functions to avoid a warning, and switching from_Py_ALWAYS_INLINEtoPy_ALWAYS_INLINEas that's available_Py_REF_LOCAL_SHIFTas it doesn't exist yet (and is currently 0 in the 3.12 nogil branch anyway)ob_ref_sharedis currentlyPy_ssize_tand not uint32_t, so use that_PY_LIKELYdoesn't exist, so drop it_Py_ThreadLocalbecomes_Py_IsOwnedByCurrentThread_Py_IncRefTotalcalls.dictobjects thread-safe in--disable-gilbuilds #112075