gh-116738: Make _suggestions module thread-safe #140321
Open
+33
−3
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.
Added a critical section to protect the
candidates
list in the free-threading build, addressing two possible issues below:PyList_GetItem()
could fail and returnNULL
. Passing it toPyUnicode_Check()
results in UB in the loop below.cpython/Modules/_suggestions.c
Lines 31 to 33 in bedaea0
_Py_CalculateSuggestions()
.cpython/Python/suggestions.c
Lines 150 to 153 in bedaea0
cc: @mpage @colesbury
Note: I considered placing the critical section inside
_Py_CalculateSuggestions()
. However, due to the loop in_suggestions__generate_suggestions_impl()
, the critical section needs to be earlier. I also checked other places where_Py_CalculateSuggestions()
is called, and all of them use local list (candidates) variables in C code, so they are safe.