TSAN reports multiple data races, SEGV errors, and thread leaks when running the full test suite
还没有人认领这个 Issue。
- 主要语言
- Python
- 星标
- 77.2k
- 派生
- 35.9k
- PR 合并指标
- PR 指标待抓取
描述
Bug report
Bug description:
Description:
When running the full test suite (./python -m test) on a debug build of the main branch configured with ThreadSanitizer (TSAN) and the experimental JIT, the test run terminates with a FAILURE result.
The attached logs show thousands of warnings from TSAN, including:
- Massive numbers of data race warnings, primarily during the parallel initialization of sub-interpreters.
- Several
DEADLYSIGNAL(SEGV) reports, causing processes to abort. - Multiple
thread leakwarnings related tomultiprocessingtests. - Failures in several core tests, including
test_datetime,test_faulthandler,test_pyrepl, andtest.test_multiprocessing_forkserver.test_manager.
Build & Environment
- CPython Version:
3.15.0a1+ (heads/main:7ac94fcb1d0, Oct 16 2025) - Platform:
Linux-6.12.48+deb13-cloud-amd64-x86_64-with-glibc2.41 - Compiler:
Clang 19.1.7 - Configuration command:
CC=clang CXX=clang++ ./configure --with-thread-sanitizer --with-pydebug --enable-experimental-jit=yes - Build command:
make -j$(nproc) - Test command:
./python -m test -j$(nproc)
Summary of Failures
The test suite concludes with the following result:
== Tests result: FAILURE ==
4 tests failed:
test.test_multiprocessing_forkserver.test_manager test_datetime
test_faulthandler test_pyrepl
Key Issues Reported by ThreadSanitizer
The full logs will be attached to this report, but here are the primary categories of errors observed.
1. Data Races during Sub-interpreter Initialization
Thousands of data race warnings are reported when multiple threads attempt to initialize global state concurrently. This is especially prominent in test_datetime, which fails with an exit code from TSAN.
- Example Data Race Warning:
================== WARNING: ThreadSanitizer: data race (pid=1111680) Write of size 8 at 0x56174f42e490 by thread T2: #0 _PyExc_InitTypes /root/cpython/main/Objects/exceptions.c:4428:32 #1 pycore_init_types /root/cpython/main/Python/pylifecycle.c:732:9 ... Previous write of size 8 at 0x56174f42e490 by thread T1: #0 _PyExc_InitTypes /root/cpython/main/Objects/exceptions.c:4428:32 #1 pycore_init_types /root/cpython/main/Python/pylifecycle.c:732:9 ... Location is global '_PyExc_ReferenceError' of size 416 at 0x56174f42e300 (python+0xa57490) ... SUMMARY: ThreadSanitizer: data race /root/cpython/main/Objects/exceptions.c:4428:32 in _PyExc_InitTypes ================== - Resulting
test_datetimeFailure:test test_datetime failed -- Traceback (most recent call last): ... AssertionError: Process return code is 66 command line: ['/root/cpython/main/python', '-X', 'faulthandler', '-I', '-c', "if True:\n from concurrent.futures import InterpreterPoolExecutor\n\n def func():\n import _datetime\n ..."]
2. SEGV Errors and Process Aborts
Multiple tests trigger fatal segmentation faults, which are caught and reported by TSAN.
- Example SEGV Report:
ThreadSanitizer:DEADLYSIGNAL ==1101487==ERROR: ThreadSanitizer: SEGV on unknown address 0x00000010ceaf (pc 0x7f05f669195c bp 0x000000000000 sp 0x7ffde6ad06a0 T1101487) ==1101487==The signal is caused by a READ memory access. #0 <null> <null> (libc.so.6+0x9495c) #1 raise <null> (libc.so.6+0x3fcc1) #2 raise <null> (python+0x103503) #3 faulthandler_raise_sigsegv /root/cpython/main/./Modules/faulthandler.c:1158:5 ... SUMMARY: ThreadSanitizer: SEGV (/lib/x86_64-linux-gnu/libc.so.6+0x9495c) ==1101487==ABORTING
3. Thread Leaks
TSAN reports that threads created during multiprocessing tests are not properly joined, leading to resource leaks.
- Example Thread Leak Warning:
================== WARNING: ThreadSanitizer: thread leak (pid=1106511) Thread T2 'Thread-2 (handl' (tid=1106562, finished) created by thread T1 at: #0 pthread_create <null> (python+0xfaa35) #1 do_start_joinable_thread /root/cpython/main/Python/thread_pthread.h:281:14 ... SUMMARY: ThreadSanitizer: thread leak (/root/cpython/main/python+0xfaa35) in pthread_create ==================
CPython versions tested on:
3.15, CPython main branch
Operating systems tested on:
Linux
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先,使用列出的 configure、build 和 ./python -m test 命令复现该报告。阅读 Objects/exceptions.c、Python/pylifecycle.c、Modules/faulthandler.c 和 Python/thread_pthread.h 中的 TSAN 跟踪,然后隔离 test_datetime、test_faulthandler、test_pyrepl 和 test.test_multiprocessing_forkserver.test_manager 中的失败。对于报告的竞争条件、崩溃和泄漏,需要明确限定原因并验证解决方案,才算完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- linux, python
- 领域
- operating-systems, testing-qa
- Issue 类型
- 缺陷
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 停滞
- 描述清晰度
- 需要澄清
- 新手友好度
- 15/100