Thanks to visit codestin.com
Credit goes to github.com

Skip to content

tracemalloc aborts when run from threads in no-gil #126315

Open
@devdanzin

Description

@devdanzin

Crash report

What happened?

It's possible to get two different aborts from failed assertions, only with PYTHON_GIL=0, using the code below:

from threading import Thread
import _tracemalloc

alive = [
    Thread(target=_tracemalloc.start, args=(
        (memoryview(bytearray(b"abc\xe9\xff")),))),
    Thread(target=_tracemalloc.start, args=()),
    Thread(target=_tracemalloc.get_traceback_limit, args=()),
    Thread(target=_tracemalloc.start, args=()),
    Thread(target=_tracemalloc.stop, args=()),
    Thread(target=_tracemalloc.reset_peak, args=()),
    Thread(target=_tracemalloc.get_tracemalloc_memory, args=())
]

for obj in alive:
    print('START', obj)
    try:
        obj.start()
    except Exception:
        pass

The errors are:

python: Python/tracemalloc.c:445: tracemalloc_remove_trace: Assertion `tracemalloc_config.tracing' failed.
Aborted

And:

python: Python/tracemalloc.c:469: tracemalloc_add_trace: Assertion `tracemalloc_config.tracing' failed.
Aborted

Found with fusil by @vstinner.

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

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

Python 3.14.0a1+ experimental free-threading build (heads/main:d467d9246c, Nov 1 2024, 09:05:56) [GCC 11.4.0]

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.13bugs and security fixes3.14bugs and security fixes3.15new features, bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)topic-free-threadingtype-crashA hard crash of the interpreter, possibly with a core dump

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions