TSAN reports multiple data races, SEGV errors, and thread leaks when running the full test suite
Ninguém assumiu esta issue ainda.
- 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:
- 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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- 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