-
-
Notifications
You must be signed in to change notification settings - Fork 31.4k
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
ctypes
thread safety auditing (and fixing)
#127945
Comments
Thank you! I can review the ctypes parts :) Heads-up: I'm currently working in |
Got it, thanks! I'll probably just move to |
I discussed this with Peter and moving forward I'll be taking over the thread safety work and continue it. |
I investigated the thread safety of ctypes and here's the (incomplete) list of issues:
|
I think there are also races on cpython/Modules/_ctypes/_ctypes.c Lines 718 to 719 in 4596666
|
Yes, I am covering that under "the initialization and concurrent modifications of stginfo is not thread safe". |
This is different and more important than concurrent modification or initialization of stginfo, and I think it should be one of the early things we should focus on. Concurrent modifications of ctypes Structures is not an important use case. However, creating separate instances of the same structure is an important use case: from ctypes import Structure, c_int
from concurrent.futures import ThreadPoolExecutor
class POINT(Structure):
_fields_ = [("x", c_int), ("y", c_int)]
with ThreadPoolExecutor() as executor:
futures = [executor.submit(POINT, i, i) for i in range(1000)]
results = [future.result() for future in futures] This needs to be both efficient and thread-safe. |
The freelist is not thread safe in free-threading so this adds lock around it make it thread safe in free-threading.
This fixes thread safety of `array_cache` and `swapped_suffix` by initializing them in module exec to make it thread safety.
Feature or enhancement
This is a tracking issue for all thread safety problems related to ctypes. I'll be working on this, but others can feel free to give me some help.
First of all, we need to find where the thread safety problems are.
Auditing
I'll be tracking the issues that get found when auditing here. The plan is to just create a new issue and link to it for each new problem instead of flooding this issue with PRs.
Generally, the workflow for fixes should follow most of the rules from #116738, but I suspect we'll need recursive mutexes for quite a few things related to callbacks, because it's difficult to tell what might be re-entrant, and we can't use critical sections for arbitrary function pointers.
Known Issues
ctypes
pointer writes are not thread safe #128182cc @encukou, as the ctypes genius, and @colesbury as the free-threading mastermind.
Linked PRs
The text was updated successfully, but these errors were encountered: