python / python/cpython

TSAN reports multiple data races, SEGV errors, and thread leaks when running the full test suite

未关闭
#140,209 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

tests type-feature
主要语言
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:

  1. Massive numbers of data race warnings, primarily during the parallel initialization of sub-interpreters.
  2. Several DEADLYSIGNAL (SEGV) reports, causing processes to abort.
  3. Multiple thread leak warnings related to multiprocessing tests.
  4. Failures in several core tests, including test_datetime, test_faulthandler, test_pyrepl, and test.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_datetime Failure:
    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

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 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

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。