Skip to content

segfault in gc with 3.14.0b1, trio and pytest#133932

@jakkdl

Description

@jakkdl

Crash report

What happened?

I'm encountering a segfault during garbage collection since 3.14.0b1 (I have not been able to reproduce it on 3.14.0a6), and while I've so far been able to minify the repro somewhat it still requires both pytest and trio

importtriofromcontextlibimportsuppressimportgcdeftest_error_in_run_loop() ->None: # Blow stuff up real good to check we at least get a TrioInternalErrorasyncdefmain() ->None: task=trio.lowlevel.current_task() task._schedule_points="hello!"# type: ignoreawaittrio.lowlevel.checkpoint() withsuppress(trio.TrioInternalError): trio.run(main) gc.collect() gc.collect() # removing this line makes the segfault disappear
$ tox -e repro_crash ===================================== test session starts ===================================== platform linux -- Python 3.14.0b1, pytest-8.3.5, pluggy-1.5.0 cachedir: .tox/crash/.pytest_cache rootdir: /home/h/Git/trio/unbreak_314 configfile: pyproject.toml collected 1 item Fatal Python error: Segmentation fault Current thread 0x00007fc3244b0bc0 [pytest] (most recent call first): Garbage-collecting File "./foo.py", line 14 in test_error_in_run_loop File ".../site-packages/_pytest/python.py", line 159 in pytest_pyfunc_call File ".../site-packages/pluggy/_callers.py", line 103 in _multicall File ".../site-packages/pluggy/_manager.py", line 120 in _hookexec File ".../site-packages/pluggy/_hooks.py", line 513 in __call__ File ".../site-packages/_pytest/python.py", line 1627 in runtest File ".../site-packages/_pytest/runner.py", line 174 in pytest_runtest_call File ".../site-packages/pluggy/_callers.py", line 103 in _multicall File ".../site-packages/pluggy/_manager.py", line 120 in _hookexec File ".../site-packages/pluggy/_hooks.py", line 513 in __call__ File ".../site-packages/_pytest/runner.py", line 242 in <lambda> File ".../site-packages/_pytest/runner.py", line 341 in from_call File ".../site-packages/_pytest/runner.py", line 241 in call_and_report File ".../site-packages/_pytest/runner.py", line 132 in runtestprotocol File ".../site-packages/_pytest/runner.py", line 113 in pytest_runtest_protocol File ".../site-packages/pluggy/_callers.py", line 103 in _multicall File ".../site-packages/pluggy/_manager.py", line 120 in _hookexec File ".../site-packages/pluggy/_hooks.py", line 513 in __call__ File ".../site-packages/_pytest/main.py", line 362 in pytest_runtestloop File ".../site-packages/pluggy/_callers.py", line 103 in _multicall File ".../site-packages/pluggy/_manager.py", line 120 in _hookexec File ".../site-packages/pluggy/_hooks.py", line 513 in __call__ File ".../site-packages/_pytest/main.py", line 337 in _main File ".../site-packages/_pytest/main.py", line 283 in wrap_session File ".../site-packages/_pytest/main.py", line 330 in pytest_cmdline_main File ".../site-packages/pluggy/_callers.py", line 103 in _multicall File ".../site-packages/pluggy/_manager.py", line 120 in _hookexec File ".../site-packages/pluggy/_hooks.py", line 513 in __call__ File ".../site-packages/_pytest/config/__init__.py", line 175 in main File ".../site-packages/_pytest/config/__init__.py", line 201 in console_main File "./.tox/crash/bin/pytest", line 10 in <module> Current thread's C stack trace (most recent call first): Binary file "/usr/lib/libpython3.14.so.1.0", at _Py_DumpStack+0x4d [0x7fc324096a8d] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x2a778c [0x7fc3240a778c] Binary file "/usr/lib/libc.so.6", at +0x3dcd0 [0x7fc323c4bcd0] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x23a40a [0x7fc32403a40a] Binary file "/usr/lib/libpython3.14.so.1.0", at +0xd8d80 [0x7fc323ed8d80] Binary file "/usr/lib/libpython3.14.so.1.0", at _Py_Dealloc+0x75 [0x7fc323f21745] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x1436c1 [0x7fc323f436c1] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x143e65 [0x7fc323f43e65] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x2379db [0x7fc3240379db] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x237e6c [0x7fc324037e6c] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x2a4df8 [0x7fc3240a4df8] Binary file "/usr/lib/libpython3.14.so.1.0", at PyObject_Vectorcall+0x5d [0x7fc323ebbc4d] Binary file "/usr/lib/libpython3.14.so.1.0", at _PyEval_EvalFrameDefault+0x13ba [0x7fc323fef17a] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x201237 [0x7fc324001237] Binary file "/usr/lib/libpython3.14.so.1.0", at +0xbb926 [0x7fc323ebb926] Binary file "/usr/lib/libpython3.14.so.1.0", at +0xbbbc0 [0x7fc323ebbbc0] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x1437c9 [0x7fc323f437c9] Binary file "/usr/lib/libpython3.14.so.1.0", at _PyObject_MakeTpCall+0x9f [0x7fc323ebb52f] Binary file "/usr/lib/libpython3.14.so.1.0", at _PyEval_EvalFrameDefault+0x4bbf [0x7fc323ff297f] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x201237 [0x7fc324001237] Binary file "/usr/lib/libpython3.14.so.1.0", at +0xbb926 [0x7fc323ebb926] Binary file "/usr/lib/libpython3.14.so.1.0", at +0xbbbc0 [0x7fc323ebbbc0] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x1437c9 [0x7fc323f437c9] Binary file "/usr/lib/libpython3.14.so.1.0", at +0xbb231 [0x7fc323ebb231] Binary file "/usr/lib/libpython3.14.so.1.0", at _PyEval_EvalFrameDefault+0x1cae [0x7fc323fefa6e] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x201237 [0x7fc324001237] Binary file "/usr/lib/libpython3.14.so.1.0", at +0xbb926 [0x7fc323ebb926] Binary file "/usr/lib/libpython3.14.so.1.0", at +0xbbbc0 [0x7fc323ebbbc0] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x1437c9 [0x7fc323f437c9] Binary file "/usr/lib/libpython3.14.so.1.0", at _PyObject_MakeTpCall+0x9f [0x7fc323ebb52f] Binary file "/usr/lib/libpython3.14.so.1.0", at _PyEval_EvalFrameDefault+0x4bbf [0x7fc323ff297f] Binary file "/usr/lib/libpython3.14.so.1.0", at +0x201237 [0x7fc324001237] <truncated rest of calls> foo.py crash: exit -11 (1.06 seconds) .> pytest foo.py pid=781607 crash: FAIL code -11 (2.11 seconds) evaluation failed :( (2.22 seconds) 

I also reproduced it in a clean 3.14.0b1 venv with trio==0.30.0; pytest==8.3.5 without relying on tox, but idr how to get it to print the stack trace that way.

It's not 100% reliable, so I suspect there's some thread race condition going on.

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Output from running 'python -VV' on the command line:

Python 3.14.0b1 (main, May 9 2025, 13:04:07) [GCC 14.2.1 20250207]

Linked PRs

Metadata

Metadata

Assignees

Labels

3.14bugs and security fixes3.15new features, bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)release-blockertype-crashA hard crash of the interpreter, possibly with a core dump

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions