ZeroIntensity · GitHub

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

Read the original on github.com ↗