gh-112075: _Py_dict_lookup needs to lock shared keys#117528
Merged
DinoV merged 8 commits intopython:mainfrom Apr 25, 2024
Merged
gh-112075: _Py_dict_lookup needs to lock shared keys#117528DinoV merged 8 commits intopython:mainfrom
DinoV merged 8 commits intopython:mainfrom
Conversation
c51437d to
f3e3db3
Compare
colesbury
reviewed
Apr 4, 2024
Contributor
colesbury
left a comment
There was a problem hiding this comment.
This looks right, but I'm still seeing issues with the test that uncovered the problem. I'll investigate more today.
colesbury
reviewed
Apr 4, 2024
8942e4d to
2f5f5a1
Compare
35cf56e to
d580aa5
Compare
colesbury
reviewed
Apr 16, 2024
Contributor
colesbury
left a comment
There was a problem hiding this comment.
I'm still looking at _Py_dict_lookup, but I think insertdict and dict_setdefault_ref_lock_held can be simpler if they handle split dictionaries early on and separate from the main code path.
cfd659c to
19d1446
Compare
…sertdict and setdefault
19d1446 to
a74c0ee
Compare
colesbury
approved these changes
Apr 25, 2024
Contributor
colesbury
left a comment
There was a problem hiding this comment.
LGTM other than the unused code warning in the default build
| } | ||
|
|
||
| static Py_ssize_t | ||
| unicodekeys_lookup_unicode_threadsafe(PyDictKeysObject* dk, PyObject *key, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
_Py_dict_lookupneeds to lock the shared keys if we have a split dictionary. If we're looking up with a non-exact unicode we need to also incref the keys as the lookup could mutate the keys and we could lose the last reference.insertdictis updated to avoid contention on the shared dict lookup by calling the threadsafe unicode lookup directly and only falling back to_Py_dict_lookupif the thread safe lookup can't succeed.dictobjects thread-safe in--disable-gilbuilds #112075