Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3.12.0b2: "Assertion failed: immortal object has less refcnt than expected _Py_IMMORTAL_REFCNT" #105587

Closed
The-Compiler opened this issue Jun 9, 2023 · 13 comments · Fixed by #105769
Labels
3.12 bugs and security fixes 3.13 bugs and security fixes release-blocker type-crash A hard crash of the interpreter, possibly with a core dump

Comments

@The-Compiler
Copy link
Contributor

The-Compiler commented Jun 9, 2023

Crash report

When I run my project with Python 3.12, sometimes on exit I get the error below.

Given the circumstances, it seems almost impossible to construct a minimal example with this. I'd appreciate more information on how to best track the source of this down... See comments below for a simpler reproducer.

If you want to try reproducing as is, getting a --with-pydebug Python 3.12.0b2 and then installing requirements.txt and misc/requirements/requirements-pyqt-6.txt followed by a python3 -m qutebrowser --temp-basedir --debug ":later 2000 quit" should do the trick.

Note that sometimes it segfaults on exit instead, which seems to be a different issue: https://www.riverbankcomputing.com/pipermail/pyqt/2023-June/045331.html

Error messages

./Include/internal/pycore_global_objects_fini_generated.h:15: _PyStaticObject_CheckRefcnt: Assertion failed: immortal object has less refcnt than expected _Py_IMMORTAL_REFCNT
Enable tracemalloc to get the memory block allocation traceback

object address  : 0x55e98b6cb508
object refcount : 4294967294
object type     : 0x55e98b5cb6c0
object type name: bytes
object repr     : b'x'

Fatal Python error: _PyObject_AssertFailed: _PyObject_AssertFailed
Python runtime state: finalizing (tstate=0x000055e98b737490)

Current thread 0x00007fca714f5740 (most recent call first):
  <no Python frame>

This is already with -X tracemalloc, I also tried PYTHONTRACEMALLOC=25 instead. It seems I can't get more information about what's happening there. Happy to go dig into this more e.g. via gdb if someone can tell me what to look for.

Your environment

  • CPython versions tested on: 3.12.0b2 with --with-pydebug
  • Operating system and architecture: Archlinux, amd64

Linked PRs

@The-Compiler The-Compiler added the type-crash A hard crash of the interpreter, possibly with a core dump label Jun 9, 2023
@The-Compiler
Copy link
Contributor Author

The-Compiler commented Jun 9, 2023

I was able to use gdb's rwatch _PyRuntime.static_objects.singletons.bytes_characters[120]->ob->ob_base->ob_base->ob_refcnt to break whenever the refcnt of the immortal value gets modified. When the issue happens, the stacktrace points to PyYAML:

Thread 1 "python3" hit Hardware read watchpoint 1: _PyRuntime.static_objects.singletons.bytes_characters[120]->ob->ob_base->ob_base->ob_refcnt

Value = 4294967295
0x00005555556e2547 in Py_INCREF (op=b'x') at ./Include/object.h:629
629	   if (new_refcnt == 0) {
(gdb) bt
#0  0x00005555556e2547 in Py_INCREF (op=b'x') at ./Include/object.h:629
#1  _Py_NewRef (obj=b'x') at ./Include/object.h:804
#2  PyBytes_FromStringAndSize (str=0x555555c152e8 <_PyRuntime+77544> "x", size=1) at Objects/bytesobject.c:128
#3  0x00005555557755c5 in unicode_encode_utf8 (unicode=unicode@entry='x', error_handler=error_handler@entry=_Py_ERROR_UNKNOWN, errors=errors@entry=0x0) at Objects/unicodeobject.c:5077
#4  0x00005555557810f3 in _PyUnicode_AsUTF8String (unicode=unicode@entry='x', errors=errors@entry=0x0) at Objects/unicodeobject.c:5165
#5  0x0000555555781103 in PyUnicode_AsUTF8String (unicode=unicode@entry='x') at Objects/unicodeobject.c:5172
#6  0x00007ffff2fd8c79 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<ScalarNode(tag='tag:yaml.org,2002:str', value='x', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad000>, __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>)
    at yaml/_yaml.c:19983
[...]

Full stack:

#0  0x00005555556e2547 in Py_INCREF (op=b'x') at ./Include/object.h:629
#1  _Py_NewRef (obj=b'x') at ./Include/object.h:804
#2  PyBytes_FromStringAndSize (str=0x555555c152e8 <_PyRuntime+77544> "x", size=1) at Objects/bytesobject.c:128
#3  0x00005555557755c5 in unicode_encode_utf8 (unicode=unicode@entry='x', error_handler=error_handler@entry=_Py_ERROR_UNKNOWN, errors=errors@entry=0x0) at Objects/unicodeobject.c:5077
#4  0x00005555557810f3 in _PyUnicode_AsUTF8String (unicode=unicode@entry='x', errors=errors@entry=0x0) at Objects/unicodeobject.c:5165
#5  0x0000555555781103 in PyUnicode_AsUTF8String (unicode=unicode@entry='x') at Objects/unicodeobject.c:5172
#6  0x00007ffff2fd8c79 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<ScalarNode(tag='tag:yaml.org,2002:str', value='x', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad000>, __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>)
    at yaml/_yaml.c:19983
#7  0x00007ffff2fd9e13 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='x', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad000>, <ScalarNode(tag='tag:yaml.org,2002:int', value='0', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad0f0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='y', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad1e0>, <ScalarNode(tag='tag:yaml.org,2002:int', value='0', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad2d0>)], start_mark=None, end_mark=None, flow_style=False) at remote 0x7fffcc5ace70>, __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21250
#8  0x00007ffff2fd9e2e in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5aca10>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acab0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='last_visited', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acb50>, <ScalarNode(tag='tag:yaml.org,2002:str', value='2023-06-09T21:16:20', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acbf0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='pinned', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acc90>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='false', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acd30>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='scroll-pos', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acdd0>, <MappingNode(tag='tag:yaml.org,2002:map', value=[(...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21259
#9  0x00007ffff2fd93f9 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5aca10>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acab0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='last_visited', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acb50>, <ScalarNode(tag='tag:yaml.org,2002:str', value='2023-06-09T21:16:20', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acbf0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='pinned', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acc90>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='false', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acd30>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='scroll-pos', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acdd0>, ...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:20717
#10 0x00007ffff2fd9e2e in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac600>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='history', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac6a0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5aca10>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acab0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='last_visited', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acb50>, <ScalarNode(tag='tag:yaml.org,2002:str', value='2023-06-09T21:16:20', start_mark=None, end_mark=N...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21259
#11 0x00007ffff2fd93f9 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac600>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='history', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac6a0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5aca10>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acab0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='last_visited', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acb50>, <ScalarNode(tag='tag:yaml.org,2002:str', value=...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:20717
#12 0x00007ffff2fd9e2e in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='geometry', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac0b0>, <ScalarNode(tag='tag:yaml.org,2002:binary', value='AdnQywADAAAAAA/0AAAERAAAF2kAAAhpAAAP9wAABFEAABdmAAAIZgAAAAIAAAAADwAAAA/3AAAE\nUQAAF2YAAAhm\n', start_mark=None, end_mark=None, style='|') at remote 0x7fffcc5ac150>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='tabs', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac1f0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac600>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='history', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac6a0>, <SequenceNode(...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21259
#13 0x00007ffff2fd93f9 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='geometry', start_mark=None, end_mark=None, --Type <RET> for more, q to quit, c to continue without paging--
style=None) at remote 0x7fffcc5ac0b0>, <ScalarNode(tag='tag:yaml.org,2002:binary', value='AdnQywADAAAAAA/0AAAERAAAF2kAAAhpAAAP9wAABFEAABdmAAAIZgAAAAIAAAAADwAAAA/3AAAE\nUQAAF2YAAAhm\n', start_mark=None, end_mark=None, style='|') at remote 0x7fffcc5ac150>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='tabs', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac1f0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac600>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='history', start_mark=None, end_mark=None, sty...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:20717
#14 0x00007ffff2fd9e2e in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='windows', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc597d50>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='geometry', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac0b0>, <ScalarNode(tag='tag:yaml.org,2002:binary', value='AdnQywADAAAAAA/0AAAERAAAF2kAAAhpAAAP9wAABFEAABdmAAAIZgAAAAIAAAAADwAAAA/3AAAE\nUQAAF2YAAAhm\n', start_mark=None, end_mark=None, style='|') at remote 0x7fffcc5ac150>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='tabs', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac1f0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', v...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21259
#15 0x00007ffff2fd6ca7 in __pyx_pf_4yaml_5_yaml_8CEmitter_12serialize
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='windows', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc597d50>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='geometry', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac0b0>, <ScalarNode(tag='tag:yaml.org,2002:binary', value='AdnQywADAAAAAA/0AAAERAAAF2kAAAhpAAAP9wAABFEAABdmAAAIZgAAAAIAAAAADwAAAA/3AAAE\nUQAAF2YAAAhm\n', start_mark=None, end_mark=None, style='|') at remote 0x7fffcc5ac150>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='tabs', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac1f0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', v...(truncated)) at yaml/_yaml.c:18775
#16 0x00007ffff2fd7285 in __pyx_pw_4yaml_5_yaml_8CEmitter_13serialize (__pyx_v_self=<optimized out>, __pyx_v_node=<optimized out>) at yaml/_yaml.c:18153
#17 0x00005555556f7c17 in method_vectorcall_O (func=<method_descriptor at remote 0x7ffff0d5a990>, args=0x7ffff7f7f988, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/descrobject.c:482
#18 0x00005555556eb56c in _PyObject_VectorcallTstate
    (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<method_descriptor at remote 0x7ffff0d5a990>, args=args@entry=0x7ffff7f7f988, nargsf=9223372036854775810, kwnames=kwnames@entry=0x0)
    at ./Include/internal/pycore_call.h:92
#19 0x00005555556eb640 in PyObject_Vectorcall (callable=callable@entry=<method_descriptor at remote 0x7ffff0d5a990>, args=args@entry=0x7ffff7f7f988, nargsf=<optimized out>, kwnames=kwnames@entry=0x0) at Objects/call.c:325
#20 0x00005555557ecc70 in _PyEval_EvalFrameDefault (tstate=0x555555c76490 <_PyRuntime+475280>, frame=0x7ffff7f7f920, throwflag=0) at Python/bytecodes.c:2645
#21 0x00005555557f2c96 in _PyEval_EvalFrame (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, frame=<optimized out>, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:87
#22 0x00005555557f2da9 in _PyEval_Vector (tstate=0x555555c76490 <_PyRuntime+475280>, func=0x7fffe4bcc710, locals=locals@entry=0x0, args=0x7fffffffb028, argcount=1, kwnames=0x0) at Python/ceval.c:1610
#23 0x00005555556eb20b in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:419
#24 0x00005555556ee35e in _PyObject_VectorcallTstate
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<function at remote 0x7fffe4bcc710>, args=args@entry=0x7fffffffb028, nargsf=nargsf@entry=1, kwnames=kwnames@entry=0x0)
    at ./Include/internal/pycore_call.h:92
#25 0x00005555556ee56b in method_vectorcall (method=<optimized out>, args=0x555555c18b78 <_PyRuntime+92024>, nargsf=<optimized out>, kwnames=0x0) at Objects/classobject.c:67
#26 0x00005555556ecfc3 in _PyVectorcall_Call
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, func=0x5555556ee3e6 <method_vectorcall>, callable=callable@entry=<method at remote 0x7fffd849bd10>, tuple=tuple@entry=(), kwargs=kwargs@entry={}) at Objects/call.c:271
#27 0x00005555556ed2db in _PyObject_Call (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<method at remote 0x7fffd849bd10>, args=args@entry=(), kwargs=kwargs@entry={}) at Objects/call.c:354
#28 0x00005555556ed313 in PyObject_Call (callable=callable@entry=<method at remote 0x7fffd849bd10>, args=args@entry=(), kwargs=kwargs@entry={}) at Objects/call.c:379
#29 0x00005555557f0b9e in _PyEval_EvalFrameDefault (tstate=0x555555c76490 <_PyRuntime+475280>, frame=0x7ffff7f7f4a8, throwflag=0) at Python/bytecodes.c:3193
#30 0x00005555557f2c96 in _PyEval_EvalFrame (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, frame=<optimized out>, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:87
#31 0x00005555557f2da9 in _PyEval_Vector (tstate=0x555555c76490 <_PyRuntime+475280>, func=0x7fffe4dafc50, locals=locals@entry=0x0, args=0x7fffffffb3d0, argcount=1, kwnames=0x0) at Python/ceval.c:1610
#32 0x00005555556eb20b in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:419
#33 0x00005555556eccc2 in _PyObject_FastCallDictTstate
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<function at remote 0x7fffe4dafc50>, args=args@entry=0x7fffffffb3d0, nargsf=nargsf@entry=1, kwargs=kwargs@entry=0x0) at Objects/call.c:133
#34 0x00005555556eceb3 in _PyObject_Call_Prepend
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<function at remote 0x7fffe4dafc50>, obj=obj@entry=<Throttle(_delay_ms=60000, _func=<method at remote 0x7fffd849bd10>, _pending_call=None, _last_call_ms=96546444, _timer=<Timer(_name='throttle-timer') at remote 0x7fffe45c9df0>) at remote 0x7fffe45c9d40>, args=args@entry=(), kwargs=kwargs@entry=0x0) at Objects/call.c:508
#35 0x000055555575e912 in slot_tp_call
    (self=self@entry=<Throttle(_delay_ms=60000, _func=<method at remote 0x7fffd849bd10>, _pending_call=None, _last_call_ms=96546444, _timer=<Timer(_name='throttle-timer') at remote 0x7fffe45c9df0>) at remote 0x7fffe45c9d40>, args=args@entry=(), kwds=kwds@entry=0x0) at Objects/typeobject.c:8761
--Type <RET> for more, q to quit, c to continue without paging--
#36 0x00005555556eb3b2 in _PyObject_MakeTpCall
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<Throttle(_delay_ms=60000, _func=<method at remote 0x7fffd849bd10>, _pending_call=None, _last_call_ms=96546444, _timer=<Timer(_name='throttle-timer') at remote 0x7fffe45c9df0>) at remote 0x7fffe45c9d40>, args=args@entry=0x7ffff7f7f498, nargs=<optimized out>, keywords=keywords@entry=0x0) at Objects/call.c:240
#37 0x00005555556eb5f2 in _PyObject_VectorcallTstate
    (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<Throttle(_delay_ms=60000, _func=<method at remote 0x7fffd849bd10>, _pending_call=None, _last_call_ms=96546444, _timer=<Timer(_name='throttle-timer') at remote 0x7fffe45c9df0>) at remote 0x7fffe45c9d40>, args=args@entry=0x7ffff7f7f498, nargsf=<optimized out>, kwnames=kwnames@entry=0x0) at ./Include/internal/pycore_call.h:90
#38 0x00005555556eb640 in PyObject_Vectorcall
    (callable=callable@entry=<Throttle(_delay_ms=60000, _func=<method at remote 0x7fffd849bd10>, _pending_call=None, _last_call_ms=96546444, _timer=<Timer(_name='throttle-timer') at remote 0x7fffe45c9df0>) at remote 0x7fffe45c9d40>, args=args@entry=0x7ffff7f7f498, nargsf=<optimized out>, kwnames=kwnames@entry=0x0) at Objects/call.c:325
#39 0x00005555557ecc70 in _PyEval_EvalFrameDefault (tstate=0x555555c76490 <_PyRuntime+475280>, frame=0x7ffff7f7f430, throwflag=0) at Python/bytecodes.c:2645
#40 0x00005555557f2c96 in _PyEval_EvalFrame (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, frame=<optimized out>, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:87
#41 0x00005555557f2da9 in _PyEval_Vector (tstate=0x555555c76490 <_PyRuntime+475280>, func=0x7fffcc571fd0, locals=locals@entry=0x0, args=0x7fffffffb780, argcount=2, kwnames=0x0) at Python/ceval.c:1610
#42 0x00005555556eb20b in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:419
#43 0x00005555556ee35e in _PyObject_VectorcallTstate
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<function at remote 0x7fffcc571fd0>, args=args@entry=0x7fffffffb780, nargsf=nargsf@entry=2, kwnames=kwnames@entry=0x0)
    at ./Include/internal/pycore_call.h:92
#44 0x00005555556ee4c1 in method_vectorcall (method=<optimized out>, args=0x7fffe44d7628, nargsf=<optimized out>, kwnames=0x0) at Objects/classobject.c:89
#45 0x00005555556ecfc3 in _PyVectorcall_Call
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, func=0x5555556ee3e6 <method_vectorcall>, callable=callable@entry=<method at remote 0x7fffe45c5550>, tuple=tuple@entry=(True,), kwargs=kwargs@entry=0x0) at Objects/call.c:271
#46 0x00005555556ed2db in _PyObject_Call (tstate=0x555555c76490 <_PyRuntime+475280>, callable=<method at remote 0x7fffe45c5550>, args=(True,), kwargs=0x0) at Objects/call.c:354
#47 0x00005555556ed313 in PyObject_Call (callable=<optimized out>, args=<optimized out>, kwargs=<optimized out>) at Objects/call.c:379
#48 0x00007ffff682d6c0 in PyQtSlot::call(_object*, _object*) const () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
#49 0x00007ffff682db50 in PyQtSlot::invoke(void**, _object*, void*, bool) const () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
#50 0x00007ffff682dd10 in PyQtSlot::invoke(void**, _object*, void*) const () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
#51 0x00007ffff6833ffe in qt_metacall_worker(_sipSimpleWrapper*, _typeobject*, _sipTypeDef*, QMetaObject::Call, int, void**) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
#52 0x00007ffff33c1b1d in sipQWidget::qt_metacall(QMetaObject::Call, int, void**) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtWidgets.abi3.so
#53 0x00007ffff5f9ba1f in  () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#54 0x00007fffea0cce82 in QWebEnginePage::loadFinished(bool) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebEngineCore.so.6
#55 0x00007fffea0cda62 in  () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebEngineCore.so.6
#56 0x00007ffff5f8cf4c in QObject::event(QEvent*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#57 0x00007fffe53ad7db in sipQWebEnginePage::event(QEvent*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtWebEngineCore.abi3.so
#58 0x00007ffff297f292 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Widgets.so.6
#59 0x00007ffff33beb76 in sipQApplication::notify(QObject*, QEvent*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtWidgets.abi3.so
#60 0x00007ffff5f3d4fa in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#61 0x00007ffff5f4069d in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#62 0x00007ffff61e8323 in  () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#63 0x00007ffff6bff981 in g_main_dispatch (context=0x7fffdc000fc0) at ../glib/glib/gmain.c:3460
#64 g_main_context_dispatch (context=0x7fffdc000fc0) at ../glib/glib/gmain.c:4200
#65 0x00007ffff6c5cb39 in g_main_context_iterate.isra.0 (context=context@entry=0x7fffdc000fc0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4276
#66 0x00007ffff6bfd032 in g_main_context_iteration (context=0x7fffdc000fc0, may_block=1) at ../glib/glib/gmain.c:4343
#67 0x00007ffff61e7caa in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#68 0x00007ffff5f48d7b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#69 0x00007ffff5f455ae in QCoreApplication::exec() () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#70 0x00007ffff3200d2f in meth_QApplication_exec () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtWidgets.abi3.so
#71 0x000055555573803d in cfunction_call (func=func@entry=<built-in method exec of Application object at remote 0x7ffff0ee73f0>, args=args@entry=(), kwargs=kwargs@entry=0x0) at Objects/methodobject.c:548
#72 0x00005555556eb3b2 in _PyObject_MakeTpCall
--Type <RET> for more, q to quit, c to continue without paging--
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<built-in method exec of Application object at remote 0x7ffff0ee73f0>, args=args@entry=0x7ffff7f7f390, nargs=<optimized out>, keywords=keywords@entry=0x0) at Objects/call.c:240
#73 0x00005555556eb5f2 in _PyObject_VectorcallTstate
    (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<built-in method exec of Application object at remote 0x7ffff0ee73f0>, args=args@entry=0x7ffff7f7f390, nargsf=<optimized out>, kwnames=kwnames@entry=0x0)
    at ./Include/internal/pycore_call.h:90
#74 0x00005555556eb640 in PyObject_Vectorcall (callable=callable@entry=<built-in method exec of Application object at remote 0x7ffff0ee73f0>, args=args@entry=0x7ffff7f7f390, nargsf=<optimized out>, kwnames=kwnames@entry=0x0)
    at Objects/call.c:325
#75 0x00005555557ecc70 in _PyEval_EvalFrameDefault (tstate=0x555555c76490 <_PyRuntime+475280>, frame=0x7ffff7f7f338, throwflag=0) at Python/bytecodes.c:2645
#76 0x00005555557f2c96 in _PyEval_EvalFrame (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, frame=<optimized out>, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:87
#77 0x00005555557f2da9 in _PyEval_Vector
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, func=func@entry=0x7ffff77304d0, locals=locals@entry={'__name__': '__main__', '__doc__': 'Simple launcher for qutebrowser.', '__package__': 'qutebrowser', '__loader__': <SourceFileLoader(name='qutebrowser.__main__', path='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py') at remote 0x7ffff779f490>, '__spec__': <ModuleSpec(name='qutebrowser.__main__', loader=<...>, origin='/home/florian/proj/qutebrowser/
git/qutebrowser/__main__.py', loader_state=None, submodule_search_locations=None, _uninitialized_submodules=[], _set_fileattr=True, _cached='/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc') at remote 0x7ffff779f4e0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7c2e510>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc', 'sys': <module at remote 0x7ffff7c36390>, 'qutebrowser': <module at remote 0x7ffff7790590>}, args=args@entry=0x0, argcount=argcount@entry=0, kwnames=kwnames@entry=0x0) at Python/ceval.c:1610
#78 0x00005555557f2e68 in PyEval_EvalCode
    (co=co@entry=<code at remote 0x7ffff7c82ce0>, globals=globals@entry={'__name__': '__main__', '__doc__': 'Simple launcher for qutebrowser.', '__package__': 'qutebrowser', '__loader__': <SourceFileLoader(name='qutebrowser.__main__', path='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py') at remote 0x7ffff779f490>, '__spec__': <ModuleSpec(name='qutebrowser.__main__', loader=<...>, origin='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', loader_state=None, submodule_search_locations=None, _uninitialized_submodules=[], _set_fileattr=True, _cached='/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc') at remote 0x7ffff779f4e0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7c2e510>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc', 'sys': <module at remote 0x7ffff7c36390>, 'qutebrowser': <module at remote 0x7ffff7790590>}, locals=locals@entry={'__name__': '__main__', '__doc__': 'Simple launcher for qutebrowser.', '__package__': 'qutebrowser', '__loader__': <SourceFileLoader(name='qutebrowser.__main__', path='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py') at remote 0x7ffff779f490>, '__spec__': <ModuleSpec(name='qutebrowser.__main__', loader=<...>, origin='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', loader_state=None, submodule_search_locations=None, _uninitialized_submodules=[], _set_fileattr=True, _cached='/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc') at remote 0x7ffff779f4e0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7c2e510>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc', 'sys': <module at remote 0x7ffff7c36390>, 'qutebrowser': <module at remote 0x7ffff7790590>}) at Python/ceval.c:567
#79 0x00005555557d8117 in builtin_exec_impl
    (module=module@entry=<module at remote 0x7ffff7c2e510>, source=<code at remote 0x7ffff7c82ce0>, globals={'__name__': '__main__', '__doc__': 'Simple launcher for qutebrowser.', '__package__': 'qutebrowser', '__loader__': <SourceFileLoader(name='qutebrowser.__main__', path='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py') at remote 0x7ffff779f490>, '__spec__': <ModuleSpec(name='qutebrowser.__main__', loader=<...>, origin='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', loader_state=None, submodule_search_locations=None, _uninitialized_submodules=[], _set_fileattr=True, _cached='/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc') at remote 0x7ffff779f4e0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7c2e510>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc', 'sys': <module at remote 0x7ffff7c36390>, 'qutebrowser': <module at remote 0x7ffff7790590>}, locals={'__name__': '__main__', '__doc__': 'Simple launcher for qutebrowser.', '__package__': 'qutebrowser', '__loader__': <SourceFileLoader(name='qutebrowser.__main__', path='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py') at remote 0x7ffff779f490>, '__spec__': <ModuleSpec(name='qutebrowser.__main__', loader=<...>, origin='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', loader_state=None, submodule_search_locations=None, _uninitialized_submodules=[], _set_fileattr=True, _cached='/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc') at remote 0x7ffff779f4e0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7c2e510>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc', 'sys': <module at remote 0x7ffff7c36390>, 'qutebrowser': <module at remote 0x7ffff7790590>}, closure=0x0) at Python/bltinmodule.c:1079
#80 0x00005555557d8232 in builtin_exec (module=<module at remote 0x7ffff7c2e510>, args=<optimized out>, args@entry=0x7ffff7f7f180, nargs=nargs@entry=2, kwnames=kwnames@entry=0x0) at Python/clinic/bltinmodule.c.h:586
#81 0x00005555557377ae in cfunction_vectorcall_FASTCALL_KEYWORDS (func=<built-in method exec of module object at remote 0x7ffff7c2e510>, args=0x7ffff7f7f180, nargsf=<optimized out>, kwnames=0x0) at Objects/methodobject.c:438
#82 0x00005555556eb56c in _PyObject_VectorcallTstate
    (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<built-in method exec of module object at remote 0x7ffff7c2e510>, args=args@entry=0x7ffff7f7f180, nargsf=9223372036854775810, kwnames=kwnames@entry=0x0)
    at ./Include/internal/pycore_call.h:92
#83 0x00005555556eb640 in PyObject_Vectorcall (callable=callable@entry=<built-in method exec of module object at remote 0x7ffff7c2e510>, args=args@entry=0x7ffff7f7f180, nargsf=<optimized out>, kwnames=kwnames@entry=0x0)
    at Objects/call.c:325
#84 0x00005555557ecc70 in _PyEval_EvalFrameDefault (tstate=0x555555c76490 <_PyRuntime+475280>, frame=0x7ffff7f7f0d8, throwflag=0) at Python/bytecodes.c:2645
#85 0x00005555557f2c96 in _PyEval_EvalFrame (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, frame=<optimized out>, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:87
#86 0x00005555557f2da9 in _PyEval_Vector (tstate=0x555555c76490 <_PyRuntime+475280>, func=0x7ffff77a6750, locals=locals@entry=0x0, args=0x7ffff7794428, argcount=2, kwnames=0x0) at Python/ceval.c:1610
#87 0x00005555556eb20b in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:419
--Type <RET> for more, q to quit, c to continue without paging--
#88 0x00005555556ecfc3 in _PyVectorcall_Call
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, func=0x5555556eb1b7 <_PyFunction_Vectorcall>, callable=callable@entry=<function at remote 0x7ffff77a6750>, tuple=tuple@entry=('qutebrowser', True), kwargs=kwargs@entry=0x0)
    at Objects/call.c:271
#89 0x00005555556ed2db in _PyObject_Call (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<function at remote 0x7ffff77a6750>, args=args@entry=('qutebrowser', True), kwargs=kwargs@entry=0x0) at Objects/call.c:354
#90 0x00005555556ed313 in PyObject_Call (callable=callable@entry=<function at remote 0x7ffff77a6750>, args=args@entry=('qutebrowser', True), kwargs=kwargs@entry=0x0) at Objects/call.c:379
#91 0x0000555555874b71 in pymain_run_module (modname=<optimized out>, set_argv0=set_argv0@entry=1) at Modules/main.c:300
#92 0x0000555555875696 in pymain_run_python (exitcode=exitcode@entry=0x7fffffffc8a4) at Modules/main.c:604
#93 0x000055555587597e in Py_RunMain () at Modules/main.c:689
#94 0x00005555558759f5 in pymain_main (args=args@entry=0x7fffffffc900) at Modules/main.c:719
#95 0x0000555555875abb in Py_BytesMain (argc=<optimized out>, argv=<optimized out>) at Modules/main.c:743
#96 0x0000555555653782 in main (argc=<optimized out>, argv=<optimized out>) at ./Programs/python.c:15

And then that also calls Py_DECREF after:

Thread 1 "python3" hit Hardware read watchpoint 1: _PyRuntime.static_objects.singletons.bytes_characters[120]->ob->ob_base->ob_base->ob_refcnt

Value = 4294967295
0x00007ffff2fcb278 in Py_DECREF (filename=filename@entry=0x7ffff2ff5500 "../../../home/florian/proj/cpython/Include/object.h", lineno=lineno@entry=609, op=op@entry=b'x') at ../../../home/florian/proj/cpython/Include/object.h:527
527	../../../home/florian/proj/cpython/Include/object.h: Bad file descriptor.                                                                                                                                                                                            
(gdb) bt
#0  0x00007ffff2fcb278 in Py_DECREF (filename=filename@entry=0x7ffff2ff5500 "../../../home/florian/proj/cpython/Include/object.h", lineno=lineno@entry=609, op=op@entry=b'x') at ../../../home/florian/proj/cpython/Include/object.h:527
#1  0x00007ffff2fcc436 in Py_XDECREF (op=op@entry=b'x') at ../../../home/florian/proj/cpython/Include/object.h:609
#2  0x00007ffff2fda642 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node (__pyx_v_self=<optimized out>, __pyx_v_node=<optimized out>, __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21393
#3  0x00007ffff2fd9e13 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='x', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad000>, <ScalarNode(tag='tag:yaml.org,2002:int', value='0', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad0f0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='y', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad1e0>, <ScalarNode(tag='tag:yaml.org,2002:int', value='0', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad2d0>)], start_mark=None, end_mark=None, flow_style=False) at remote 0x7fffcc5ace70>, __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21250

Full stacktrace:

#0  0x00007ffff2fcb278 in Py_DECREF (filename=filename@entry=0x7ffff2ff5500 "../../../home/florian/proj/cpython/Include/object.h", lineno=lineno@entry=609, op=op@entry=b'x') at ../../../home/florian/proj/cpython/Include/object.h:527
#1  0x00007ffff2fcc436 in Py_XDECREF (op=op@entry=b'x') at ../../../home/florian/proj/cpython/Include/object.h:609
#2  0x00007ffff2fda642 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node (__pyx_v_self=<optimized out>, __pyx_v_node=<optimized out>, __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21393
#3  0x00007ffff2fd9e13 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='x', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad000>, <ScalarNode(tag='tag:yaml.org,2002:int', value='0', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad0f0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='y', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad1e0>, <ScalarNode(tag='tag:yaml.org,2002:int', value='0', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ad2d0>)], start_mark=None, end_mark=None, flow_style=False) at remote 0x7fffcc5ace70>, __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21250
#4  0x00007ffff2fd9e2e in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5aca10>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acab0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='last_visited', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acb50>, <ScalarNode(tag='tag:yaml.org,2002:str', value='2023-06-09T21:16:20', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acbf0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='pinned', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acc90>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='false', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acd30>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='scroll-pos', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acdd0>, <MappingNode(tag='tag:yaml.org,2002:map', value=[(...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21259
#5  0x00007ffff2fd93f9 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5aca10>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acab0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='last_visited', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acb50>, <ScalarNode(tag='tag:yaml.org,2002:str', value='2023-06-09T21:16:20', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acbf0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='pinned', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acc90>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='false', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acd30>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='scroll-pos', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acdd0>, ...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:20717
#6  0x00007ffff2fd9e2e in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac600>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='history', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac6a0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5aca10>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acab0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='last_visited', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acb50>, <ScalarNode(tag='tag:yaml.org,2002:str', value='2023-06-09T21:16:20', start_mark=None, end_mark=N...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21259
#7  0x00007ffff2fd93f9 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac600>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='history', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac6a0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5aca10>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acab0>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='last_visited', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5acb50>, <ScalarNode(tag='tag:yaml.org,2002:str', value=...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:20717
#8  0x00007ffff2fd9e2e in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='geometry', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac0b0>, <ScalarNode(tag='tag:yaml.org,2002:binary', value='AdnQywADAAAAAA/0AAAERAAAF2kAAAhpAAAP9wAABFEAABdmAAAIZgAAAAIAAAAADwAAAA/3AAAE\nUQAAF2YAAAhm\n', start_mark=None, end_mark=None, style='|') at remote 0x7fffcc5ac150>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='tabs', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac1f0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac600>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='history', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac6a0>, <SequenceNode(...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21259
#9  0x00007ffff2fd93f9 in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='geometry', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac0b0>, <ScalarNode(tag='tag:yaml.org,2002:binary', value='AdnQywADAAAAAA/0AAAERAAAF2kAAAhpAAAP9wAABFEAABdmAAAIZgAAAAIAAAAADwAAAA/3AAAE\nUQAAF2YAAAhm\n', start_mark=None, end_mark=None, style='|') at remote 0x7fffcc5ac150>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='tabs', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac1f0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', value='true', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac600>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='history', start_mark=None, end_mark=None, sty...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:20717
#10 0x00007ffff2fd9e2e in __pyx_f_4yaml_5_yaml_8CEmitter__serialize_node
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='windows', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc597d50>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='geometry', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac0b0>, <ScalarNode(tag='tag:yaml.org,2002:binary', value='AdnQywADAAAAAA/0AAAERAAAF2kAAAhpAAAP9wAABFEAABdmAAAIZgAAAAIAAAAADwAAAA/3AAAE\nUQAAF2YAAAhm\n', start_mark=None, end_mark=None, style='|') at remote 0x7fffcc5ac150>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='tabs', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac1f0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', v...(truncated), __pyx_v_parent=<optimized out>, __pyx_v_index=<optimized out>) at yaml/_yaml.c:21259
#11 0x00007ffff2fd6ca7 in __pyx_pf_4yaml_5_yaml_8CEmitter_12serialize
    (__pyx_v_self=0x5555570a3aa0, __pyx_v_node=<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='windows', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc597d50>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='geometry', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac0b0>, <ScalarNode(tag='tag:yaml.org,2002:binary', value='AdnQywADAAAAAA/0AAAERAAAF2kAAAhpAAAP9wAABFEAABdmAAAIZgAAAAIAAAAADwAAAA/3AAAE\nUQAAF2YAAAhm\n', start_mark=None, end_mark=None, style='|') at remote 0x7fffcc5ac150>), (<ScalarNode(tag='tag:yaml.org,2002:str', value='tabs', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac1f0>, <SequenceNode(tag='tag:yaml.org,2002:seq', value=[<MappingNode(tag='tag:yaml.org,2002:map', value=[(<ScalarNode(tag='tag:yaml.org,2002:str', value='active', start_mark=None, end_mark=None, style=None) at remote 0x7fffcc5ac560>, <ScalarNode(tag='tag:yaml.org,2002:bool', v...(truncated)) at yaml/_yaml.c:18775
#12 0x00007ffff2fd7285 in __pyx_pw_4yaml_5_yaml_8CEmitter_13serialize (__pyx_v_self=<optimized out>, __pyx_v_node=<optimized out>) at yaml/_yaml.c:18153
#13 0x00005555556f7c17 in method_vectorcall_O (func=<method_descriptor at remote 0x7ffff0d5a990>, args=0x7ffff7f7f988, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/descrobject.c:482
#14 0x00005555556eb56c in _PyObject_VectorcallTstate (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<method_descriptor at remote 0x7ffff0d5a990>, args=args@entry=0x7ffff7f7f988, nargsf=9223372036854775810, kwnames=kwnames@entry=0x0)
    at ./Include/internal/pycore_call.h:92
#15 0x00005555556eb640 in PyObject_Vectorcall (callable=callable@entry=<method_descriptor at remote 0x7ffff0d5a990>, args=args@entry=0x7ffff7f7f988, nargsf=<optimized out>, kwnames=kwnames@entry=0x0) at Objects/call.c:325
#16 0x00005555557ecc70 in _PyEval_EvalFrameDefault (tstate=0x555555c76490 <_PyRuntime+475280>, frame=0x7ffff7f7f920, throwflag=0) at Python/bytecodes.c:2645
#17 0x00005555557f2c96 in _PyEval_EvalFrame (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, frame=<optimized out>, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:87
#18 0x00005555557f2da9 in _PyEval_Vector (tstate=0x555555c76490 <_PyRuntime+475280>, func=0x7fffe4bcc710, locals=locals@entry=0x0, args=0x7fffffffb028, argcount=1, kwnames=0x0) at Python/ceval.c:1610
#19 0x00005555556eb20b in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:419
#20 0x00005555556ee35e in _PyObject_VectorcallTstate (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<function at remote 0x7fffe4bcc710>, args=args@entry=0x7fffffffb028, nargsf=nargsf@entry=1, kwnames=kwnames@entry=0x0)
    at ./Include/internal/pycore_call.h:92
#21 0x00005555556ee56b in method_vectorcall (method=<optimized out>, args=0x555555c18b78 <_PyRuntime+92024>, nargsf=<optimized out>, kwnames=0x0) at Objects/classobject.c:67
#22 0x00005555556ecfc3 in _PyVectorcall_Call (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, func=0x5555556ee3e6 <method_vectorcall>, callable=callable@entry=<method at remote 0x7fffd849bd10>, tuple=tuple@entry=(), kwargs=kwargs@entry={})
    at Objects/call.c:271
#23 0x00005555556ed2db in _PyObject_Call (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<method at remote 0x7fffd849bd10>, args=args@entry=(), kwargs=kwargs@entry={}) at Objects/call.c:354
#24 0x00005555556ed313 in PyObject_Call (callable=callable@entry=<method at remote 0x7fffd849bd10>, args=args@entry=(), kwargs=kwargs@entry={}) at Objects/call.c:379
#25 0x00005555557f0b9e in _PyEval_EvalFrameDefault (tstate=0x555555c76490 <_PyRuntime+475280>, frame=0x7ffff7f7f4a8, throwflag=0) at Python/bytecodes.c:3193
#26 0x00005555557f2c96 in _PyEval_EvalFrame (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, frame=<optimized out>, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:87
#27 0x00005555557f2da9 in _PyEval_Vector (tstate=0x555555c76490 <_PyRuntime+475280>, func=0x7fffe4dafc50, locals=locals@entry=0x0, args=0x7fffffffb3d0, argcount=1, kwnames=0x0) at Python/ceval.c:1610
#28 0x00005555556eb20b in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:419
#29 0x00005555556eccc2 in _PyObject_FastCallDictTstate (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<function at remote 0x7fffe4dafc50>, args=args@entry=0x7fffffffb3d0, nargsf=nargsf@entry=1, kwargs=kwargs@entry=0x0)
    at Objects/call.c:133
#30 0x00005555556eceb3 in _PyObject_Call_Prepend
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<function at remote 0x7fffe4dafc50>, obj=obj@entry=<Throttle(_delay_ms=60000, _func=<method at remote 0x7fffd849bd10>, _pending_call=None, _last_call_ms=96546444, _timer=<Timer(_name='throttle-timer') at remote 0x7fffe45c9df0>) at remote 0x7fffe45c9d40>, args=args@entry=(), kwargs=kwargs@entry=0x0) at Objects/call.c:508
#31 0x000055555575e912 in slot_tp_call
    (self=self@entry=<Throttle(_delay_ms=60000, _func=<method at remote 0x7fffd849bd10>, _pending_call=None, _last_call_ms=96546444, _timer=<Timer(_name='throttle-timer') at remote 0x7fffe45c9df0>) at remote 0x7fffe45c9d40>, args=args@entry=(), kwds=kwds@entry=0x0)
    at Objects/typeobject.c:8761
#32 0x00005555556eb3b2 in _PyObject_MakeTpCall
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<Throttle(_delay_ms=60000, _func=<method at remote 0x7fffd849bd10>, _pending_call=None, _last_call_ms=96546444, _timer=<Timer(_name='throttle-timer') at remote 0x7fffe45c9df0>) at remote 0x7fffe45c9d40>, args=args@entry=0x7ffff7f7f498, nargs=<optimized out>, keywords=keywords@entry=0x0) at Objects/call.c:240
#33 0x00005555556eb5f2 in _PyObject_VectorcallTstate
    (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<Throttle(_delay_ms=60000, _func=<method at remote 0x7fffd849bd10>, _pending_call=None, _last_call_ms=96546444, _timer=<Timer(_name='throttle-timer') at remote 0x7fffe45c9df0>) at remote 0x7fffe45c9d40>, args=args@entry=0x7ffff7f7f498, nargsf=<optimized out>, kwnames=kwnames@entry=0x0) at ./Include/internal/pycore_call.h:90
#34 0x00005555556eb640 in PyObject_Vectorcall
    (callable=callable@entry=<Throttle(_delay_ms=60000, _func=<method at remote 0x7fffd849bd10>, _pending_call=None, _last_call_ms=96546444, _timer=<Timer(_name='throttle-timer') at remote 0x7fffe45c9df0>) at remote 0x7fffe45c9d40>, args=args@entry=0x7ffff7f7f498, nargsf=<optimized out>, kwnames=kwnames@entry=0x0) at Objects/call.c:325
#35 0x00005555557ecc70 in _PyEval_EvalFrameDefault (tstate=0x555555c76490 <_PyRuntime+475280>, frame=0x7ffff7f7f430, throwflag=0) at Python/bytecodes.c:2645
#36 0x00005555557f2c96 in _PyEval_EvalFrame (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, frame=<optimized out>, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:87
#37 0x00005555557f2da9 in _PyEval_Vector (tstate=0x555555c76490 <_PyRuntime+475280>, func=0x7fffcc571fd0, locals=locals@entry=0x0, args=0x7fffffffb780, argcount=2, kwnames=0x0) at Python/ceval.c:1610
#38 0x00005555556eb20b in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:419
#39 0x00005555556ee35e in _PyObject_VectorcallTstate (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<function at remote 0x7fffcc571fd0>, args=args@entry=0x7fffffffb780, nargsf=nargsf@entry=2, kwnames=kwnames@entry=0x0)
    at ./Include/internal/pycore_call.h:92
#40 0x00005555556ee4c1 in method_vectorcall (method=<optimized out>, args=0x7fffe44d7628, nargsf=<optimized out>, kwnames=0x0) at Objects/classobject.c:89
#41 0x00005555556ecfc3 in _PyVectorcall_Call (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, func=0x5555556ee3e6 <method_vectorcall>, callable=callable@entry=<method at remote 0x7fffe45c5550>, tuple=tuple@entry=(True,), kwargs=kwargs@entry=0x0)
    at Objects/call.c:271
#42 0x00005555556ed2db in _PyObject_Call (tstate=0x555555c76490 <_PyRuntime+475280>, callable=<method at remote 0x7fffe45c5550>, args=(True,), kwargs=0x0) at Objects/call.c:354
#43 0x00005555556ed313 in PyObject_Call (callable=<optimized out>, args=<optimized out>, kwargs=<optimized out>) at Objects/call.c:379
#44 0x00007ffff682d6c0 in PyQtSlot::call(_object*, _object*) const () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
#45 0x00007ffff682db50 in PyQtSlot::invoke(void**, _object*, void*, bool) const () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
#46 0x00007ffff682dd10 in PyQtSlot::invoke(void**, _object*, void*) const () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
#47 0x00007ffff6833ffe in qt_metacall_worker(_sipSimpleWrapper*, _typeobject*, _sipTypeDef*, QMetaObject::Call, int, void**) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtCore.abi3.so
#48 0x00007ffff33c1b1d in sipQWidget::qt_metacall(QMetaObject::Call, int, void**) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtWidgets.abi3.so
#49 0x00007ffff5f9ba1f in  () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#50 0x00007fffea0cce82 in QWebEnginePage::loadFinished(bool) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebEngineCore.so.6
#51 0x00007fffea0cda62 in  () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6WebEngineCore.so.6
#52 0x00007ffff5f8cf4c in QObject::event(QEvent*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#53 0x00007fffe53ad7db in sipQWebEnginePage::event(QEvent*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtWebEngineCore.abi3.so
#54 0x00007ffff297f292 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Widgets.so.6
#55 0x00007ffff33beb76 in sipQApplication::notify(QObject*, QEvent*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtWidgets.abi3.so
#56 0x00007ffff5f3d4fa in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#57 0x00007ffff5f4069d in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#58 0x00007ffff61e8323 in  () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#59 0x00007ffff6bff981 in g_main_dispatch (context=0x7fffdc000fc0) at ../glib/glib/gmain.c:3460
#60 g_main_context_dispatch (context=0x7fffdc000fc0) at ../glib/glib/gmain.c:4200
#61 0x00007ffff6c5cb39 in g_main_context_iterate.isra.0 (context=context@entry=0x7fffdc000fc0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4276
#62 0x00007ffff6bfd032 in g_main_context_iteration (context=0x7fffdc000fc0, may_block=1) at ../glib/glib/gmain.c:4343
#63 0x00007ffff61e7caa in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#64 0x00007ffff5f48d7b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#65 0x00007ffff5f455ae in QCoreApplication::exec() () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/Qt6/lib/libQt6Core.so.6
#66 0x00007ffff3200d2f in meth_QApplication_exec () at /home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/PyQt6/QtWidgets.abi3.so
#67 0x000055555573803d in cfunction_call (func=func@entry=<built-in method exec of Application object at remote 0x7ffff0ee73f0>, args=args@entry=(), kwargs=kwargs@entry=0x0) at Objects/methodobject.c:548
#68 0x00005555556eb3b2 in _PyObject_MakeTpCall
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<built-in method exec of Application object at remote 0x7ffff0ee73f0>, args=args@entry=0x7ffff7f7f390, nargs=<optimized out>, keywords=keywords@entry=0x0) at Objects/call.c:240
#69 0x00005555556eb5f2 in _PyObject_VectorcallTstate
    (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<built-in method exec of Application object at remote 0x7ffff0ee73f0>, args=args@entry=0x7ffff7f7f390, nargsf=<optimized out>, kwnames=kwnames@entry=0x0) at ./Include/internal/pycore_call.h:90
#70 0x00005555556eb640 in PyObject_Vectorcall (callable=callable@entry=<built-in method exec of Application object at remote 0x7ffff0ee73f0>, args=args@entry=0x7ffff7f7f390, nargsf=<optimized out>, kwnames=kwnames@entry=0x0) at Objects/call.c:325
#71 0x00005555557ecc70 in _PyEval_EvalFrameDefault (tstate=0x555555c76490 <_PyRuntime+475280>, frame=0x7ffff7f7f338, throwflag=0) at Python/bytecodes.c:2645
#72 0x00005555557f2c96 in _PyEval_EvalFrame (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, frame=<optimized out>, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:87
#73 0x00005555557f2da9 in _PyEval_Vector
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, func=func@entry=0x7ffff77304d0, locals=locals@entry={'__name__': '__main__', '__doc__': 'Simple launcher for qutebrowser.', '__package__': 'qutebrowser', '__loader__': <SourceFileLoader(name='qutebrowser.__main__', path='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py') at remote 0x7ffff779f490>, '__spec__': <ModuleSpec(name='qutebrowser.__main__', loader=<...>, origin='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', loader_state=None, submodule_search_locations=None, _uninitialized_submodules=[], _set_fileattr=True, _cached='/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc') at remote 0x7ffff779f4e0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7c2e510>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc', 'sys': <module at remote 0x7ffff7c36390>, 'qutebrowser': <module at remote 0x7ffff7790590>}, args=args@entry=0x0, argcount=argcount@entry=0, kwnames=kwnames@entry=0x0) at Python/ceval.c:1610
#74 0x00005555557f2e68 in PyEval_EvalCode
    (co=co@entry=<code at remote 0x7ffff7c82ce0>, globals=globals@entry={'__name__': '__main__', '__doc__': 'Simple launcher for qutebrowser.', '__package__': 'qutebrowser', '__loader__': <SourceFileLoader(name='qutebrowser.__main__', path='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py') at remote 0x7ffff779f490>, '__spec__': <ModuleSpec(name='qutebrowser.__main__', loader=<...>, origin='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', loader_state=None, submodule_search_locations=None, _uninitialized_submodules=[], _set_fileattr=True, _cached='/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc') at remote 0x7ffff779f4e0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7c2e510>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc', 'sys': <module at remote 0x7ffff7c36390>, 'qutebrowser': <module at remote 0x7ffff7790590>}, locals=locals@entry={'__name__': '__main__', '__doc__': 'Simple launcher for qutebrowser.', '__package__': 'qutebrowser', '__loader__': <SourceFileLoader(name='qutebrowser.__main__', path='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py') at remote 0x7ffff779f490>, '__spec__': <ModuleSpec(name='qutebrowser.__main__', loader=<...>, origin='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', loader_state=None, submodule_search_locations=None, _uninitialized_submodules=[], _set_fileattr=True, _cached='/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc') at remote 0x7ffff779f4e0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7c2e510>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc', 'sys': <module at remote 0x7ffff7c36390>, 'qutebrowser': <module at remote 0x7ffff7790590>}) at Python/ceval.c:567
#75 0x00005555557d8117 in builtin_exec_impl
    (module=module@entry=<module at remote 0x7ffff7c2e510>, source=<code at remote 0x7ffff7c82ce0>, globals={'__name__': '__main__', '__doc__': 'Simple launcher for qutebrowser.', '__package__': 'qutebrowser', '__loader__': <SourceFileLoader(name='qutebrowser.__main__', path='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py') at remote 0x7ffff779f490>, '__spec__': <ModuleSpec(name='qutebrowser.__main__', loader=<...>, origin='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', loader_state=None, submodule_search_locations=None, _uninitialized_submodules=[], _set_fileattr=True, _cached='/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc') at remote 0x7ffff779f4e0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7c2e510>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc', 'sys': <module at remote 0x7ffff7c36390>, 'qutebrowser': <module at remote 0x7ffff7790590>}, locals={'__name__': '__main__', '__doc__': 'Simple launcher for qutebrowser.', '__package__': 'qutebrowser', '__loader__': <SourceFileLoader(name='qutebrowser.__main__', path='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py') at remote 0x7ffff779f490>, '__spec__': <ModuleSpec(name='qutebrowser.__main__', loader=<...>, origin='/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', loader_state=None, submodule_search_locations=None, _uninitialized_submodules=[], _set_fileattr=True, _cached='/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc') at remote 0x7ffff779f4e0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7c2e510>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-312.pyc', 'sys': <module at remote 0x7ffff7c36390>, 'qutebrowser': <module at remote 0x7ffff7790590>}, closure=0x0) at Python/bltinmodule.c:1079
#76 0x00005555557d8232 in builtin_exec (module=<module at remote 0x7ffff7c2e510>, args=<optimized out>, args@entry=0x7ffff7f7f180, nargs=nargs@entry=2, kwnames=kwnames@entry=0x0) at Python/clinic/bltinmodule.c.h:586
#77 0x00005555557377ae in cfunction_vectorcall_FASTCALL_KEYWORDS (func=<built-in method exec of module object at remote 0x7ffff7c2e510>, args=0x7ffff7f7f180, nargsf=<optimized out>, kwnames=0x0) at Objects/methodobject.c:438
#78 0x00005555556eb56c in _PyObject_VectorcallTstate
    (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<built-in method exec of module object at remote 0x7ffff7c2e510>, args=args@entry=0x7ffff7f7f180, nargsf=9223372036854775810, kwnames=kwnames@entry=0x0) at ./Include/internal/pycore_call.h:92
#79 0x00005555556eb640 in PyObject_Vectorcall (callable=callable@entry=<built-in method exec of module object at remote 0x7ffff7c2e510>, args=args@entry=0x7ffff7f7f180, nargsf=<optimized out>, kwnames=kwnames@entry=0x0) at Objects/call.c:325
#80 0x00005555557ecc70 in _PyEval_EvalFrameDefault (tstate=0x555555c76490 <_PyRuntime+475280>, frame=0x7ffff7f7f0d8, throwflag=0) at Python/bytecodes.c:2645
#81 0x00005555557f2c96 in _PyEval_EvalFrame (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, frame=<optimized out>, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:87
#82 0x00005555557f2da9 in _PyEval_Vector (tstate=0x555555c76490 <_PyRuntime+475280>, func=0x7ffff77a6750, locals=locals@entry=0x0, args=0x7ffff7794428, argcount=2, kwnames=0x0) at Python/ceval.c:1610
#83 0x00005555556eb20b in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:419
#84 0x00005555556ecfc3 in _PyVectorcall_Call
    (tstate=tstate@entry=0x555555c76490 <_PyRuntime+475280>, func=0x5555556eb1b7 <_PyFunction_Vectorcall>, callable=callable@entry=<function at remote 0x7ffff77a6750>, tuple=tuple@entry=('qutebrowser', True), kwargs=kwargs@entry=0x0) at Objects/call.c:271
#85 0x00005555556ed2db in _PyObject_Call (tstate=0x555555c76490 <_PyRuntime+475280>, callable=callable@entry=<function at remote 0x7ffff77a6750>, args=args@entry=('qutebrowser', True), kwargs=kwargs@entry=0x0) at Objects/call.c:354
#86 0x00005555556ed313 in PyObject_Call (callable=callable@entry=<function at remote 0x7ffff77a6750>, args=args@entry=('qutebrowser', True), kwargs=kwargs@entry=0x0) at Objects/call.c:379
#87 0x0000555555874b71 in pymain_run_module (modname=<optimized out>, set_argv0=set_argv0@entry=1) at Modules/main.c:300
#88 0x0000555555875696 in pymain_run_python (exitcode=exitcode@entry=0x7fffffffc8a4) at Modules/main.c:604
#89 0x000055555587597e in Py_RunMain () at Modules/main.c:689
#90 0x00005555558759f5 in pymain_main (args=args@entry=0x7fffffffc900) at Modules/main.c:719
#91 0x0000555555875abb in Py_BytesMain (argc=<optimized out>, argv=<optimized out>) at Modules/main.c:743
#92 0x0000555555653782 in main (argc=<optimized out>, argv=<optimized out>) at ./Programs/python.c:15

As a note to myself, the Python stacktrace and YAML data:

Traceback (most recent call first):
  File "/home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/yaml/representer.py", line 28, in represent
    self.serialize(node)
  File "/home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/yaml/__init__.py", line 241, in dump_all
    dumper.represent(data)
  File "/home/florian/proj/qutebrowser/.venv/lib/python3.12/site-packages/yaml/__init__.py", line 253, in dump
    return dump_all([data], stream, Dumper=Dumper, **kwds)
  File "/home/florian/proj/qutebrowser/git/qutebrowser/utils/utils.py", line 703, in yaml_dump
    yaml_data = yaml.dump(data, f, Dumper=YamlDumper, default_flow_style=False,
  File "/home/florian/proj/qutebrowser/git/qutebrowser/misc/sessions.py", line 352, in save
    utils.yaml_dump(data, f)
  File "/home/florian/proj/qutebrowser/git/qutebrowser/misc/sessions.py", line 363, in _save_autosave
    self.save('_autosave')
  File "/home/florian/proj/qutebrowser/git/qutebrowser/misc/throttle.py", line 81, in __call__
    self._func(*args, **kwargs)
  File "/home/florian/proj/qutebrowser/git/qutebrowser/browser/browsertab.py", line 1183, in _on_load_finished
    sessions.session_manager.save_autosave()
  File "/home/florian/proj/qutebrowser/git/qutebrowser/browser/webengine/webenginetab.py", line 1557, in _on_load_finished
    super()._on_load_finished(ok)
  <built-in method exec of Application object at remote 0x7ffff0ee73f0>
  File "/home/florian/proj/qutebrowser/git/qutebrowser/app.py", line 140, in qt_mainloop
    return objects.qapp.exec()
  File "/home/florian/proj/qutebrowser/git/qutebrowser/app.py", line 130, in run
    ret = qt_mainloop()
  File "/home/florian/proj/qutebrowser/git/qutebrowser/qutebrowser.py", line 245, in main
    return app.run(args)
  File "/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py", line 29, in <module>
    sys.exit(qutebrowser.qutebrowser.main())
  <built-in method exec of module object at remote 0x7ffff7c2e510>
  File "/home/florian/proj/cpython/Lib/runpy.py", line 88, in _run_code
    exec(code, run_globals)
  File "/home/florian/proj/cpython/Lib/runpy.py", line 198, in _run_module_as_main
    return _run_code(code, main_globals, None,
{'windows': [{'active': True, 'geometry': b'\x01\xd9\xd0\xcb\x00\x03\x00\x00\x00\x00\x048\x00\x00\x07\x8c\x00\x00\x08i\x00\x00\x0e\xf9\x00\x00\x04;\x00\x00\x07\x99\x00\x00\x08f\x00\x00\x0e\xf6\x00\x00\x00\x01\x00\x00\x00\x00\x08p\x00\x00\x04;\x00\x00\x07\x99\x00\x00\x08f\x00\x00\x0e\xf6', 'tabs': [{'history': [{'url': 'https://start.duckduckgo.com/', 'title': 'DuckDuckGo — Privacy, simplified.', 'active': True, 'last_visited': '2023-06-09T21:22:33', 'zoom': <float at remote 0x7fffd84ad2d0>, 'scroll-pos': {'x': 0, 'y': 0}, 'pinned': False}], 'active': True}]}]}

@eduardo-elizondo
Copy link
Contributor

@The-Compiler thanks for bringing this up! Since you already have the environment set up, could we quickly verify what happens if we remove _PyStaticObject_CheckRefcnt? Does everything else work? Trying to get a better picture to isolate where the error is. I'll try to run your repro over the weekend to dig a bit more into it!

If the error is only in _PyStaticObject_CheckRefcnt itself, we might have some invalid assumptions about our ability to use this check since any extension could easily modify the immortal values.

cc @ericsnowcurrently

@The-Compiler
Copy link
Contributor Author

Well, turns out with that, finding a simpler reproducer was very easy - all it takes is a python3 -c "import yaml" for:

./Include/internal/pycore_global_objects_fini_generated.h:15: _PyStaticObject_CheckRefcnt: Assertion failed: immortal object has less refcnt than expected _Py_IMMORTAL_REFCNT
Enable tracemalloc to get the memory block allocation traceback

object address  : 0x5603f6336b28
object refcount : 4294967294
object type     : 0x5603f624a9e0
object type name: int
object repr     : 3

Fatal Python error: _PyObject_AssertFailed: _PyObject_AssertFailed
Python runtime state: finalizing (tstate=0x00005603f63a6118)

(will answer the rest in a separate comment, just wanted to send this before people dig into the qutebrowser reproducer more)

@The-Compiler
Copy link
Contributor Author

With the import yaml example, and watch _PyRuntime.static_objects.singletons.small_ints[5+3]->ob_base->ob_refcnt (not sure why I was using rwatch before, that breaks on all reads...), I get:

Hardware watchpoint 1: _PyRuntime.static_objects.singletons.small_ints[5+3]->ob_base->ob_refcnt

Old value = 4294967295
New value = 4294967294
0x00007ffff75cb27f in Py_DECREF (filename=filename@entry=0x7ffff75f5500 "../../../home/florian/proj/cpython/Include/object.h", lineno=lineno@entry=609, op=op@entry=3) at ../../../home/florian/proj/cpython/Include/object.h:527
527	../../../home/florian/proj/cpython/Include/object.h: Bad file descriptor.                                                                                                                                                             
#0  0x00007ffff75cb27f in Py_DECREF (filename=filename@entry=0x7ffff75f5500 "../../../home/florian/proj/cpython/Include/object.h", lineno=lineno@entry=609, op=op@entry=3) at ../../../home/florian/proj/cpython/Include/object.h:527
#1  0x00007ffff75cc436 in Py_XDECREF (op=op@entry=3) at ../../../home/florian/proj/cpython/Include/object.h:609
#2  0x00007ffff75cc7bb in __Pyx_PyCode_New (a=a@entry=0, k=k@entry=0, l=l@entry=3, s=s@entry=0, f=f@entry=3, code=<optimized out>, c=(), n=(), v=('major', 'minor', 'patch'), fv=(), cell=(), fn='yaml/_yaml.pyx', name='get_version', 
    fline=9, lnos=b'') at yaml/_yaml.c:384
#3  0x00007ffff75cd26e in __Pyx_InitCachedConstants () at yaml/_yaml.c:23102
#4  0x00007ffff75cfd58 in __pyx_pymod_exec__yaml (__pyx_pyinit_module=<optimized out>) at yaml/_yaml.c:23438
#5  0x0000555555739d39 in PyModule_ExecDef (module=module@entry=<module at remote 0x7ffff76ed670>, def=def@entry=0x7ffff75fe0c0 <__pyx_moduledef>) at Objects/moduleobject.c:440
[...]

and

Hardware watchpoint 1: _PyRuntime.static_objects.singletons.small_ints[5+3]->ob_base->ob_refcnt

Old value = 4294967294
New value = 4294967295
Py_INCREF (op=3) at ./Include/object.h:642
642	   _Py_INC_REFTOTAL();
#0  Py_INCREF (op=3) at ./Include/object.h:642
#1  _Py_NewRef (obj=3) at ./Include/object.h:798
#2  PyDict_SetItem (op=op@entry={}, key='co_argcount', value=value@entry=3) at Objects/dictobject.c:1883
#3  0x000055555572bdaa in PyDict_SetItemString (v=v@entry={}, key=key@entry=0x7ffff75f5d31 "co_argcount", item=item@entry=3) at Objects/dictobject.c:3919
#4  0x00007ffff75cc520 in __Pyx_PyCode_New (a=a@entry=3, k=k@entry=0, l=l@entry=5, s=s@entry=0, f=f@entry=3, code=b'', c=(), n=(), v=('__pyx_type', '__pyx_checksum', '__pyx_state', '__pyx_PickleError', '__pyx_result'), fv=(), cell=(), 
    fn='stringsource', name='__pyx_unpickle_Mark', fline=1, lnos=b'') at yaml/_yaml.c:347
#5  0x00007ffff75cd357 in __Pyx_InitCachedConstants () at yaml/_yaml.c:23112
#6  0x00007ffff75cfd58 in __pyx_pymod_exec__yaml (__pyx_pyinit_module=<optimized out>) at yaml/_yaml.c:23438
#7  0x0000555555739d39 in PyModule_ExecDef (module=module@entry=<module at remote 0x7ffff76ed670>, def=def@entry=0x7ffff75fe0c0 <__pyx_moduledef>) at Objects/moduleobject.c:440
[...]

and finally, what seems to be the culprit for this one:

Hardware watchpoint 1: _PyRuntime.static_objects.singletons.small_ints[5+3]->ob_base->ob_refcnt

Old value = 4294967295
New value = 4294967294
0x00007ffff75cb27f in Py_DECREF (filename=filename@entry=0x7ffff75f5500 "../../../home/florian/proj/cpython/Include/object.h", lineno=lineno@entry=609, op=op@entry=3) at ../../../home/florian/proj/cpython/Include/object.h:527
527	../../../home/florian/proj/cpython/Include/object.h: Bad file descriptor.                                                                                                                                                             
#0  0x00007ffff75cb27f in Py_DECREF (filename=filename@entry=0x7ffff75f5500 "../../../home/florian/proj/cpython/Include/object.h", lineno=lineno@entry=609, op=op@entry=3) at ../../../home/florian/proj/cpython/Include/object.h:527
#1  0x00007ffff75cc436 in Py_XDECREF (op=op@entry=3) at ../../../home/florian/proj/cpython/Include/object.h:609
#2  0x00007ffff75cc7a1 in __Pyx_PyCode_New (a=a@entry=3, k=k@entry=0, l=l@entry=5, s=s@entry=0, f=f@entry=3, code=<optimized out>, c=(), n=(), v=('__pyx_type', '__pyx_checksum', '__pyx_state', '__pyx_PickleError', '__pyx_result'), 
    fv=(), cell=(), fn='stringsource', name='__pyx_unpickle_Mark', fline=1, lnos=b'') at yaml/_yaml.c:381
#3  0x00007ffff75cd357 in __Pyx_InitCachedConstants () at yaml/_yaml.c:23112
#4  0x00007ffff75cfd58 in __pyx_pymod_exec__yaml (__pyx_pyinit_module=<optimized out>) at yaml/_yaml.c:23438
#5  0x0000555555739d39 in PyModule_ExecDef (module=module@entry=<module at remote 0x7ffff76ed670>, def=def@entry=0x7ffff75fe0c0 <__pyx_moduledef>) at Objects/moduleobject.c:440
[...]

Since you already have the environment set up, could we quickly verify what happens if we remove _PyStaticObject_CheckRefcnt? Does everything else work? Trying to get a better picture to isolate where the error is. I'll try to run your repro over the weekend to dig a bit more into it!

With:

diff --git i/Include/internal/pycore_global_objects_fini_generated.h w/Include/internal/pycore_global_objects_fini_generated.h
index d5819fcd1c..2cc8f90f19 100644
--- i/Include/internal/pycore_global_objects_fini_generated.h
+++ w/Include/internal/pycore_global_objects_fini_generated.h
@@ -12,9 +12,9 @@ extern "C" {
 static inline void
 _PyStaticObject_CheckRefcnt(PyObject *obj) {
     if (Py_REFCNT(obj) < _Py_IMMORTAL_REFCNT) {
-        _PyObject_ASSERT_FAILED_MSG(obj,
-            "immortal object has less refcnt than expected "
-            "_Py_IMMORTAL_REFCNT");
+        // _PyObject_ASSERT_FAILED_MSG(obj,
+        //     "immortal object has less refcnt than expected "
+        //     "_Py_IMMORTAL_REFCNT");
     }
 }
 #endif

everything seems to be working fine, yes (other than the most likely unrelated segfault at exit).

If the error is only in _PyStaticObject_CheckRefcnt itself, we might have some invalid assumptions about our ability to use this check since any extension could easily modify the immortal values.

From what I understood from here:

cpython/Include/object.h

Lines 683 to 689 in f668f73

static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
{
// Non-limited C API and limited C API for Python 3.9 and older access
// directly PyObject.ob_refcnt.
if (_Py_IsImmortal(op)) {
return;
}

This would be prevented by the API? Or is the problem the comment above, together with what's being mentioned here?

cpython/Include/object.h

Lines 100 to 103 in f668f73

Using the lower 32 bits makes the value backwards compatible by allowing
C-Extensions without the updated checks in Py_INCREF and Py_DECREF to safely
increase and decrease the objects reference count. The object would lose its
immortality, but the execution would still be correct.

@eduardo-elizondo
Copy link
Contributor

eduardo-elizondo commented Jun 9, 2023

This would be prevented by the API? Or is the problem the comment above, together with what's being mentioned here?

None of the above actually! It's slightly more nuanced and we try to explain it in detail in the backwards compatibility section of PEP683: https://peps.python.org/pep-0683/#backward-compatibility and in the "Accidental Immortality" and "Accidental De-Immortalizing" sections.

To summarize, what we are seeing here is an example of a C-Extension that "accidentally de-immortalizes" an object that it thought to be immortal simply because the Py_DECREF code that it's using is not immortal aware yet (or it mutates ob_refcnt directly). This does not mean that we will run into correctness issues (unless we reach the extreme case of 2^29 imbalanced decrefs) - hence my ask of removing the static check code.

The problem here is that I don't think the runtime can guarantee that _PyStaticObject_CheckRefcnt can guarantee this check purely from the fact that we can have accidental de-immortalization cases. Thus, I believe the right solution is to remove the refcount checks for static objects.

I'll sync with @ericsnowcurrently and try to send a patch shortly!

@AlexWaygood AlexWaygood added 3.12 bugs and security fixes 3.13 bugs and security fixes labels Jun 9, 2023
@ericsnowcurrently
Copy link
Member

FWIW, I recall not particularly caring for that check in the first place but not caring enough to worry about it. IIRC, the check is mostly useful as a sanity check during core development. So if it's a problem then we should at least limit exposure (e.g. only in Py_DEBUG builds). If it doesn't really add value then we should remove it.

@ericsnowcurrently
Copy link
Member

@The-Compiler, good sleuthing, BTW.

@The-Compiler
Copy link
Contributor Author

It is already only active with --with-pydebug, FWIW - I ran into it while debugging another issue, hence the debug build.

@ericsnowcurrently
Copy link
Member

I thought so, but hadn't had a chance to check yet. 😄

@eduardo-elizondo
Copy link
Contributor

Just sent in a patch, this should fix the issue going forward

@sunmy2019
Copy link
Member

sunmy2019 commented Jun 12, 2023

This does not mean that we will run into correctness issues (unless we reach the extreme case of 2^29 imbalanced decrefs) - hence my ask of removing the static check code.

The check still detects something if we are all using new codes. I think we can make it a soft error/warning rather than completely removing it.

@eduardo-elizondo
Copy link
Contributor

@sunmy2019 yup, that should work too. I could go either way, happy to implement it as a warning instead

@The-Compiler
Copy link
Contributor Author

Just tested again, and indeed this seems a little less violent now 🙂 Thanks everyone for the fix!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.12 bugs and security fixes 3.13 bugs and security fixes release-blocker type-crash A hard crash of the interpreter, possibly with a core dump
Projects
6 participants