-
-
Couldn't load subscription status.
- Fork 33.3k
Description
Bug report
Bug description:
ThreadSanitizer detects a data race when using InterpreterPoolExecutor with the free-threading build. Multiple threads simultaneously write to the global variable lilendian_table in the _struct module during module initialization.
The race occurs at:
- Thread T1 and T2: Both write to
lilendian_tableat_structmodule_exec(lines 2745:31 and 2746:33) - Location:
global 'lilendian_table' of size 840 at 0x7ffff4513ca0in_struct.cpython-315td-x86_64-linux-gnu.so
Both threads are executing through InterpreterPoolExecutor, importing modules in separate subinterpreters, which triggers concurrent initialization of the _struct extension module.
How to Reproduce
Build configuration:
CC=clang CXX=clang++ ./configure --with-thread-sanitizer --with-pydebug --enable-experimental-jit=yes --with-lto=full --with-tail-call-interp --disable-gil
make -jRun command:
TSAN_OPTIONS=handle_segv=0 ./python -X dev -X showrefcount bug.pyTest script (bug.py):
from concurrent.futures import InterpreterPoolExecutor
from functools import lru_cache
@lru_cache(maxsize=512)
def fib(n):
"""Function that JIT will compile"""
if n < 2:
return n
return fib(n-1) + fib(n-2)
if __name__ == '__main__':
with InterpreterPoolExecutor() as t:
for i in range(2):
t.submit(fib, i)Note: The race occurs with any loop iteration count (range(1), range(2), etc.)
TSAN Output
Environment
- CPython version: main branch
- Operating System: Linux
- Compiler: Clang
- Build flags:
--with-thread-sanitizer --with-pydebug --enable-experimental-jit=yes --with-lto=full --with-tail-call-interp --disable-gil
Additional Information
A second similar data race is also reported for another write in _structmodule_exec at line 2746:33 to the same global variable.
Both races involve InterpreterPoolExecutor threads executing module initialization code concurrently in different subinterpreters.
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Metadata
Metadata
Assignees
Labels
Projects
Status