python / python/cpython

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

Aberta
#140,209 3 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

tests type-feature
Linguagem predominante
Python
Estrelas
77.2k
Forks
36k
Métricas de merge de PRs
Métricas de PR pendentes

Descrição

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

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece reproduzindo o relatório com os comandos configure, build e ./python -m test listados. Leia os traces do TSAN em Objects/exceptions.c, Python/pylifecycle.c, Modules/faulthandler.c e Python/thread_pthread.h e, em seguida, isole as falhas em test_datetime, test_faulthandler, test_pyrepl e test.test_multiprocessing_forkserver.test_manager. O trabalho estará concluído quando houver uma causa delimitada e uma resolução verificada para as race conditions, os crashes e os vazamentos relatados.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
linux, python
Domínio
operating-systems, testing-qa
Tipo de issue
Bug
Dificuldade
5/5
Tempo estimado
Mais de uma semana
Status de atividade
Estagnada
Clareza
Precisa de esclarecimento
Facilidade para iniciantes
15/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.