TSAN reports multiple data races, SEGV errors, and thread leaks when running the full test suite
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 35.9k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
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
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách tái hiện báo cáo với các lệnh configure, build và ./python -m test được liệt kê. Đọc các trace TSAN trong Objects/exceptions.c, Python/pylifecycle.c, Modules/faulthandler.c và Python/thread_pthread.h, sau đó cô lập các lỗi trong test_datetime, test_faulthandler, test_pyrepl và test.test_multiprocessing_forkserver.test_manager. Công việc được xem là hoàn tất khi đã xác định được nguyên nhân trong phạm vi cụ thể và xác minh được cách giải quyết cho các race condition, crash và rò rỉ được báo cáo.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- linux, python
- Lĩnh vực
- operating-systems, testing-qa
- Loại issue
- Lỗi
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 15/100