Skip to content

decimal.getcontext crashes with --with-decimal-contextvar=no and -X showrefcount #123657

Closed
@ZeroIntensity

Description

@ZeroIntensity

Crash report

What happened?

cc @godlygeek, who helped me find this

I was investigating a reference leak on the asyncio test suite, and I came across decimal.getcontext leaking some memory. Here's what I was doing:

$ ./python -Xshowrefcount -c "import decimal; decimal.getcontext()"
[207 refs, 0 blocks]

This is a problem in itself, since this is a leak, but after configuring with --with-decimal-contextvar=no, then the above code fails with a negative reference count:

Python/gc.c:92: gc_decref: Assertion "gc_get_refs(g) > 0" failed: refcount is too small
Enable tracemalloc to get the memory block allocation traceback

object address  : 0x5d3d7d336490
object refcount : 1
object type     : 0x5d3d7d4acd50
object type name: decimal.Context
object repr     : Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

It seems both of these problems were caused by #123244

(@encukou, this needs extension-modules, 3.14 and 3.13)

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

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

No response

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.13bugs and security fixes3.14bugs and security fixesextension-modulesC modules in the Modules dirtype-crashA hard crash of the interpreter, possibly with a core dump

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions