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 new features, 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 new features, 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

miss-islington pushed a commit to miss-islington/cpython that referenced this issue Jun 14, 2023
…ythonGH-105638)

(cherry picked from commit 6199fe3)

Co-authored-by: Eddie Elizondo <eduardo.elizondorueda@gmail.com>
kumaraditya303 pushed a commit that referenced this issue Jun 14, 2023
…GH-105638) (#105769)

gh-105587: Remove assertion from `_PyStaticObject_CheckRefcnt` (GH-105638)
(cherry picked from commit 6199fe3)

Co-authored-by: Eddie Elizondo <eduardo.elizondorueda@gmail.com>
TheShermanTanker added a commit to TheShermanTanker/cpython that referenced this issue Jun 14, 2023
commit 74c2422
Author: Guido van Rossum <guido@python.org>
Date:   Wed Jun 14 08:19:24 2023 -0700

    Update DSL docs for cases generator (python#105753)

    * Clarify things around goto error/ERROR_IF a bit
    * Remove docs for super-instructions
    * Add pseudo; fix heading markup

commit 1d857da
Author: Mark Shannon <mark@hotpy.org>
Date:   Wed Jun 14 16:15:08 2023 +0100

    pythonGH-77273: Better bytecodes for f-strings (pythonGH-6132)

commit 307bcea
Author: Victor Stinner <vstinner@python.org>
Date:   Wed Jun 14 17:00:40 2023 +0200

    xmlrpc.client uses datetime.datetime.isoformat() (python#105741)

    Reimplement _iso8601_format() using the datetime isoformat() method.
    Ignore the timezone.

    Co-Authored-by: Paul Ganssle <1377457+pganssle@users.noreply.github.com>

commit 7b1f0f2
Author: Alex Waygood <Alex.Waygood@Gmail.com>
Date:   Wed Jun 14 15:58:41 2023 +0100

    pythongh-105570: Deprecate unusual ways of creating empty TypedDicts (python#105780)

    Deprecate two methods of creating typing.TypedDict classes with 0 fields using the functional syntax: `TD = TypedDict("TD")` and `TD = TypedDict("TD", None)`. Both will be disallowed in Python 3.15. To create a TypedDict class with 0 fields, either use `class TD(TypedDict): pass` or `TD = TypedDict("TD", {})`.

commit d32e8d6
Author: TATHAGATA ROY <royzen9495@gmail.com>
Date:   Wed Jun 14 19:51:30 2023 +0530

    pythongh-105196: Fix indentations of section headings in C API docs (python#105672)

commit 4a113e2
Author: Alex Waygood <Alex.Waygood@Gmail.com>
Date:   Wed Jun 14 15:19:27 2023 +0100

    Typing docs: move the deprecated stuff below the non-deprecated stuff (python#105781)

commit 7199584
Author: Mark Shannon <mark@hotpy.org>
Date:   Wed Jun 14 13:46:37 2023 +0100

    pythonGH-100987: Allow objects other than code objects as the "executable" of an internal frame. (pythonGH-105727)

    * Add table describing possible executable classes for out-of-process debuggers.

    * Remove shim code object creation code as it is no longer needed.

    * Make lltrace a bit more robust w.r.t. non-standard frames.

commit ad56340
Author: Alex Waygood <Alex.Waygood@Gmail.com>
Date:   Wed Jun 14 13:38:49 2023 +0100

    pythongh-105566: Deprecate unusual ways of creating `typing.NamedTuple` classes (python#105609)

    Deprecate creating a typing.NamedTuple class using keyword arguments to denote the fields (`NT = NamedTuple("NT", x=int, y=str)`). This will be disallowed in Python 3.15. Use the class-based syntax or the functional syntax instead.

    Two methods of creating `NamedTuple` classes with 0 fields using the functional syntax are also deprecated, and will be disallowed in Python 3.15: `NT = NamedTuple("NT")` and `NT = NamedTuple("NT", None)`. To create a `NamedTuple` class with 0 fields, either use `class NT(NamedTuple): pass` or `NT = NamedTuple("NT", [])`.

commit fc8037d
Author: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Date:   Wed Jun 14 05:35:06 2023 -0700

    pythongh-104873: Add typing.get_protocol_members and typing.is_protocol (python#104878)

    Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>

commit ba516e7
Author: Kirill Podoprigora <kirill.bast9@mail.ru>
Date:   Wed Jun 14 15:17:12 2023 +0300

    pythongh-102541: Hide traceback in help prompt (pythongh-102614)

commit 0316063
Author: Victor Stinner <vstinner@python.org>
Date:   Wed Jun 14 12:30:22 2023 +0200

    gdb libpython.py: Remove compatibility code (python#105739)

    Remove compatibility code for Python 2 and early Python 3 versions.

    * Remove os_fsencode() reimplementation: use os.fsencode() directly.
      os.fsencode() was added to Python 3.2.
    * Remove references to Python 2 and "Python 3": just say "Python".
    * Remove outdated u'' string format: use '' instead.

commit e5d45b7
Author: Nikita Sobolev <mail@sobolevn.me>
Date:   Wed Jun 14 13:29:16 2023 +0300

    pythongh-105745: Fix open method of webbrowser.Konqueror (python#105746)

commit 67f69db
Author: Nikita Sobolev <mail@sobolevn.me>
Date:   Wed Jun 14 13:26:20 2023 +0300

    pythongh-105687: Remove deprecated objects from `re` module (python#105688)

commit fb655e0
Author: Victor Stinner <vstinner@python.org>
Date:   Wed Jun 14 12:12:25 2023 +0200

    _ctypes callbacks.c uses _Py_COMP_DIAG_IGNORE_DEPR_DECLS (python#105732)

    Replace #pragma with _Py_COMP_DIAG_PUSH,
    _Py_COMP_DIAG_IGNORE_DEPR_DECLS and _Py_COMP_DIAG_POP to ease Python
    maintenance. Also add a comment explaining why callbacks.c ignores a
    deprecation warning.

commit 5cdd5ba
Author: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Date:   Wed Jun 14 00:26:48 2023 -0700

    tarfile: Fix positional-only syntax in docs (pythonGH-105770)

    The syntax used in the current docs (a / before any args) is invalid.

    I think the right approach is for the arguments to arbitrary
    filter functions to be treated as positional-only, meaning that users
    can supply filter functions with any names for the argument. tarfile.py
    only calls the filter function with positional arguments.

commit 6199fe3
Author: Eddie Elizondo <eduardo.elizondorueda@gmail.com>
Date:   Wed Jun 14 00:33:32 2023 -0400

    pythongh-105587: Remove assertion from `_PyStaticObject_CheckRefcnt` (python#105638)

commit dab5a3e
Author: Barney Gale <barney.gale@gmail.com>
Date:   Wed Jun 14 05:06:58 2023 +0100

    pythonGH-89812: Clean up pathlib tests. (python#104829)

    Clean up pathlib tests.

    Merge `PurePathTest` into `_BasePurePathTest`, and `PathTest` into
    `_BasePathTest`.

commit b95de96
Author: Victor Stinner <vstinner@python.org>
Date:   Wed Jun 14 05:34:11 2023 +0200

    pythongh-105751: test_ctypes avoids "from ctypes import *" (python#105768)

    Using "import *" prevents linters like pyflakes to detect undefined names
    (usually missing imports).

    Replace c_voidp with c_void_p.

commit 381a1dc
Author: Victor Stinner <vstinner@python.org>
Date:   Wed Jun 14 04:47:01 2023 +0200

    pythongh-105751: test_ctypes.test_numbers uses top level imports (python#105762)

    Moroever, c_ulonglong and c_bool are always available.

commit ac7b551
Author: Victor Stinner <vstinner@python.org>
Date:   Wed Jun 14 04:46:47 2023 +0200

    pythongh-105751: test_ctypes gets Windows attrs from ctypes (python#105758)

    test_ctypes now gets attributes specific to Windows from the ctypes
    module, rather than relying on "from ctypes import *".

    Attributes:

    * ctypes.FormatError
    * ctypes.WINFUNCTYPE
    * ctypes.WinError
    * ctypes.WinDLL
    * ctypes.windll
    * ctypes.oledll
    * ctypes.get_last_error()
    * ctypes.set_last_error()

commit b87d288
Author: Eric Snow <ericsnowcurrently@gmail.com>
Date:   Tue Jun 13 18:58:23 2023 -0600

    pythongh-105699: Use a Thread-Local Variable for PKGCONTEXT (pythongh-105740)

    This fixes a race during import. The existing _PyRuntimeState.imports.pkgcontext is shared between interpreters, and occasionally this would cause a crash when multiple interpreters were importing extensions modules at the same time.  To solve this we add a thread-local variable for the value.  We also leave the existing state (and infrequent race) in place for platforms that do not support thread-local variables.

commit fcf0647
Author: Eric Snow <ericsnowcurrently@gmail.com>
Date:   Tue Jun 13 18:39:18 2023 -0600

    pythongh-104812: Skip Pending Calls Tests if No Threading (pythongh-105761)

    This fixes the WASM buildbots.

commit b542972
Author: Victor Stinner <vstinner@python.org>
Date:   Wed Jun 14 02:33:00 2023 +0200

    pythongh-105387: Limited C API implements Py_INCREF() as func (python#105388)

    In the limited C API version 3.12, Py_INCREF() and Py_DECREF()
    functions are now implemented as opaque function calls to hide
    implementation details.

commit f3266c0
Author: zentarim <33746047+zentarim@users.noreply.github.com>
Date:   Wed Jun 14 02:45:47 2023 +0300

    pythonGH-104554: Add RTSPS support to `urllib/parse.py` (python#104605)

    * pythonGH-104554: Add RTSPS support to `urllib/parse.py`

    RTSPS is the permanent scheme defined in
    https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml
    alongside RTSP and RTSPU schemes.

    * 📜🤖 Added by blurb_it.

    ---------

    Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>

commit 4cefe3c
Author: Steve Dower <steve.dower@python.org>
Date:   Wed Jun 14 00:00:16 2023 +0100

    pythongh-105436: Ignore unrelated errors when checking empty env (pythonGH-105742)

commit 457a459
Author: Victor Stinner <vstinner@python.org>
Date:   Wed Jun 14 00:32:12 2023 +0200

    pythongh-98040: Fix importbench: use types.ModuleType() (python#105743)

    Replace removed imp.new_module(name) with types.ModuleType(name).

commit 757b402
Author: Eric Snow <ericsnowcurrently@gmail.com>
Date:   Tue Jun 13 15:02:19 2023 -0600

    pythongh-104812: Run Pending Calls in any Thread (pythongh-104813)

    For a while now, pending calls only run in the main thread (in the main interpreter).  This PR changes things to allow any thread run a pending call, unless the pending call was explicitly added for the main thread to run.

commit 4e80082
Author: Łukasz Langa <lukasz@langa.pl>
Date:   Tue Jun 13 20:44:27 2023 +0000

    pythongh-102613: Bump recursion limit to fix running test_pathlib under Coverage (python#105744)

commit be2779c
Author: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
Date:   Tue Jun 13 21:42:03 2023 +0100

    pythongh-105481: add flags to each instr in the opcode metadata table, to replace opcode.hasarg/hasname/hasconst (python#105482)

commit 2211454
Author: Victor Stinner <vstinner@python.org>
Date:   Tue Jun 13 20:16:26 2023 +0200

    pythongh-105733: Deprecate ctypes SetPointerType() and ARRAY() (python#105734)

commit b97e14a
Author: Eric Snow <ericsnowcurrently@gmail.com>
Date:   Tue Jun 13 11:08:32 2023 -0600

    pythongh-105603: Change the PyInterpreterConfig.own gil Field (pythongh-105620)

    We are changing it to be more flexible that a strict bool can be for possible future expanded used cases.

commit abfbab6
Author: Lysandros Nikolaou <lisandrosnik@gmail.com>
Date:   Tue Jun 13 17:18:11 2023 +0200

    pythongh-105718: Fix buffer allocation in tokenizer with readline (python#105728)

commit d0f1afd
Author: Victor Stinner <vstinner@python.org>
Date:   Tue Jun 13 13:49:36 2023 +0200

    pythongh-105373: Remove PyArg_Parse() deprecation (python#105394)

    There is no plan to deprecate PyArg_Parse().

    The deprecation was added as a comment in the C API documentation in
    2007 by commit 85eb8c1.

commit ed8217b
Author: Lysandros Nikolaou <lisandrosnik@gmail.com>
Date:   Tue Jun 13 12:39:29 2023 +0200

    pythongh-105713: Document that tokenize raises when mixing tabs/spaces (python#105723)

    * pythongh-105713: Document that tokenize raises when mixing tabs/spaces
    * Update Doc/whatsnew/3.12.rst

    Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>

commit c3d2d64
Author: Mark Shannon <mark@hotpy.org>
Date:   Tue Jun 13 10:34:27 2023 +0100

    Fix magic number (pythonGH-105722)

commit 09ffa69
Author: Mark Shannon <mark@hotpy.org>
Date:   Tue Jun 13 09:51:05 2023 +0100

    pythonGH-105678: Split MAKE_FUNCTION into MAKE_FUNCTION and SET_FUNCTION_ATTRIBUTE (pythonGH-105680)

commit 217589d
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Tue Jun 13 10:38:01 2023 +0200

    pythongh-105375: Improve error handling in _Unpickler_SetInputStream() (python#105667)

    Prevent exceptions from possibly being overwritten in case of multiple
    failures.

commit 840d02f
Author: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
Date:   Tue Jun 13 11:36:40 2023 +0530

    pythonGH-105684: Require `asyncio.Task` implementations to support `set_name` method (python#105685)

commit 829ac13
Author: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
Date:   Tue Jun 13 11:11:34 2023 +0530

    pythonGH-104787: use bitfields in `_asyncio` (python#104788)

commit 8da9d1b
Author: Guido van Rossum <guido@python.org>
Date:   Mon Jun 12 14:55:15 2023 -0700

    pythongh-105540: Fix code generator tests (python#105707)

    This involves expanding PEEK, POKE and JUMPBY macros,
    and removing super and register tests (those features no longer exist).

commit ca3cc4b
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Mon Jun 12 23:35:07 2023 +0200

    pythongh-105375: Explicitly initialise all {Pickler,Unpickler}Object fields (python#105686)

    All fields must be explicitly initialised to prevent manipulation of
    uninitialised fields in dealloc.

    Align initialisation order with the layout of the object structs.

commit f0fb782
Author: Jay <74105438+weijay0804@users.noreply.github.com>
Date:   Tue Jun 13 04:29:02 2023 +0800

    pythongh-105331: Change `asyncio.sleep` to raise ``ValueError` for nan (python#105641)

    Co-authored-by: Guido van Rossum <gvanrossum@gmail.com>
    Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>

commit 9544948
Author: Guido van Rossum <guido@python.org>
Date:   Mon Jun 12 11:19:04 2023 -0700

    Remove support for legacy bytecode instructions (python#105705)

    (A legacy instruction is of the form `instr(FOOBAR)`,
    i.e. missing the `(... -- ...)` stack/cache effect annotation.)

commit b9e7dc7
Author: Guido van Rossum <guido@python.org>
Date:   Mon Jun 12 10:47:08 2023 -0700

    pythongh-105229: Remove syntactic support for super-instructions (python#105703)

    It will not be used again.

commit 4f7d3b6
Author: Dora203 <66343334+sku2000@users.noreply.github.com>
Date:   Tue Jun 13 00:14:55 2023 +0800

    pythongh-105436: The environment block should end with two null wchar_t values (pythonGH-105495)

commit 2b90796
Author: Petr Viktorin <encukou@gmail.com>
Date:   Mon Jun 12 17:45:49 2023 +0200

    pythongh-103968: PyType_FromMetaclass: Allow metaclasses with tp_new=NULL (pythonGH-105386)

commit 58f0bda
Author: Steve Dower <steve.dower@python.org>
Date:   Mon Jun 12 16:09:14 2023 +0100

    ARM64 clamping bug also exists in MSVC 14.35 (pythonGH-105679)

commit a8d69fe
Author: Nikita Sobolev <mail@sobolevn.me>
Date:   Mon Jun 12 11:47:56 2023 +0300

    pythongh-105673: Fix uninitialized warning in sysmodule.c (python#105674)

    In sys_add_xoption(), 'value' may be uninitialized for some error paths.

commit 58f5227
Author: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
Date:   Sun Jun 11 22:31:59 2023 +0100

    pythongh-105481: add pseudo-instructions to the bytecodes DSL (python#105506)

commit 20a56d8
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Sun Jun 11 22:18:46 2023 +0200

    pythongh-105375: Harden pyexpat initialisation (python#105606)

    Add proper error handling to add_errors_module() to prevent exceptions
    from possibly being overwritten.

commit 41cddc2
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Sun Jun 11 22:02:49 2023 +0200

    pythongh-105375: Improve error handling in the sys extension module (python#105611)

    In _PySys_AddXOptionWithError() and sys_add_xoption(),
    bail on first error to prevent exceptions from possibly being
    overwritten.

commit e8998e4
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Sun Jun 11 21:46:19 2023 +0200

    pythongh-105375: Improve error handling in _ctypes (python#105593)

    Prevent repeated PyLong_FromVoidPtr() from possibly overwriting the
    current exception.

commit 555be81
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Sun Jun 11 21:29:19 2023 +0200

    pythongh-105375: Improve error handling in PyUnicode_BuildEncodingMap() (python#105491)

    Bail on first error to prevent exceptions from possibly being overwritten.

commit 567d6ae
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Sun Jun 11 21:23:28 2023 +0200

    pythongh-105375: Improve PyErr_WarnExplicit() error handling (python#105610)

    Bail on first error to prevent exceptions from possibly being
    overwritten.

commit 3f7c081
Author: Samet YASLAN <sametyaslan@gmail.com>
Date:   Sun Jun 11 20:51:21 2023 +0200

    bpo-44185: Added close() to mock_open __exit__ (python#26902)

commit 18d16e9
Author: Tomas R <tomas.roun8@gmail.com>
Date:   Sun Jun 11 17:50:34 2023 +0200

    pythongh-102676: Add more convenience properties to `dis.Instruction` (python#103969)

    Adds start_offset, cache_offset, end_offset, baseopcode,
    baseopname, jump_target and oparg to dis.Instruction.

    Also slightly improves the disassembly output by allowing
    opnames to overflow into the space reserved for opargs.

commit 845e593
Author: litlighilit <97860435+litlighilit@users.noreply.github.com>
Date:   Sun Jun 11 22:06:42 2023 +0800

    Fix typo in configparser module docstring (python#105652)

    "zc.buildbot" -> "zc.buildout"

commit d4fa529
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Sun Jun 11 12:20:43 2023 +0200

    pythongh-105375: Improve error handling in the builtins extension module (python#105585)

commit c932f72
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Sun Jun 11 12:06:06 2023 +0200

    pythongh-105375: Improve _decimal error handling (python#105605)

    Fix a bug where an exception could end up being overwritten.

commit 16d4968
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Sun Jun 11 12:03:09 2023 +0200

    pythongh-105375: Harden _datetime initialisation (python#105604)

    Improve error handling so init bails on the first exception.

commit 35cff54
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Sun Jun 11 11:58:08 2023 +0200

    pythongh-105375: Improve array.array exception handling (python#105594)

    Fix a bug where 'tp_richcompare' could end up overwriting an exception.

commit 01f4230
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Sun Jun 11 11:56:32 2023 +0200

    pythongh-105375: Harden _ssl initialisation (python#105599)

    Add proper error handling to prevent reference leaks and overwritten
    exceptions.

commit cc87948
Author: Hugo van Kemenade <hugovk@users.noreply.github.com>
Date:   Sun Jun 11 12:17:35 2023 +0300

    pythongh-80480: Emit DeprecationWarning for array's 'u' type code (python#95760)

commit 3a314f7
Author: Gregory P. Smith <greg@krypto.org>
Date:   Sat Jun 10 12:09:20 2023 -0700

    pythongh-99108: Mention HACL\* in the hashlib docs. (python#105634)

commit 0d1d6ab
Author: Gregory P. Smith <greg@krypto.org>
Date:   Sat Jun 10 11:49:06 2023 -0700

    Cleanup and clarify our hashlib docs. (python#105624)

    Clarify and improve our hashlib docs. Now with 50% less mess!

commit d636d7d
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Fri Jun 9 23:53:33 2023 +0200

    pythongh-105375: Harden error handling in `_testcapi/heaptype.c` (python#105608)

    Bail on first error in heapctypesubclasswithfinalizer_finalize()

commit 33c92c4
Author: Nikita Sobolev <mail@sobolevn.me>
Date:   Sat Jun 10 00:48:54 2023 +0300

    pythongh-105375: Improve error handling in `zoneinfo` module (python#105586)

    Fix bugs where exceptions could end up being overwritten
    because of deferred error handling.

    Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>

commit 91441bf
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Fri Jun 9 23:14:02 2023 +0200

    Docs: fix formatting in 2023-06-09-12-59-18 NEWS item (python#105607)

commit b047fa5
Author: Pablo Galindo Salgado <Pablogsal@gmail.com>
Date:   Fri Jun 9 21:39:01 2023 +0100

    pythongh-105549: Tokenize separately NUMBER and NAME tokens and allow 0-prefixed literals (python#105555)

commit 00b599a
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Fri Jun 9 22:35:03 2023 +0200

    pythongh-105375: Improve error handling in _elementtree (python#105591)

    Fix bugs where exceptions could end up being overwritten.

commit f668f73
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Fri Jun 9 22:07:47 2023 +0200

    pythongh-105375: Improve posix error handling (python#105592)

    Fix a bug where an IndexError could end up being overwritten.

commit eede1d2
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Fri Jun 9 21:57:25 2023 +0200

    pythongh-105375: Improve errnomodule error handling (python#105590)

    Bail immediately if an exception is set, to prevent exceptions from
    being overwritten.

commit 89aac6f
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Fri Jun 9 19:09:53 2023 +0200

    pythongh-105375: Improve _pickle error handling (python#105475)

    Error handling was deferred in some cases, which could potentially lead
    to exceptions being overwritten.

commit 6c832dd
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Fri Jun 9 18:55:53 2023 +0200

    pythongh-105375: Improve error handling in compiler_enter_scope() (python#105494)

commit d7f46bc
Author: Pablo Galindo Salgado <Pablogsal@gmail.com>
Date:   Fri Jun 9 17:01:26 2023 +0100

    pythongh-105564: Don't include artificial newlines in the line attribute of tokens (python#105565)

commit 1dd267a
Author: Pablo Galindo Salgado <Pablogsal@gmail.com>
Date:   Fri Jun 9 16:59:37 2023 +0100

    Clarify the supported cases in the tokenize module (python#105569)

commit 59f009e
Author: Ethan Furman <ethan@stoneleaf.us>
Date:   Fri Jun 9 08:56:05 2023 -0700

    pythongh-105497: [Enum] Fix Flag inversion when alias/mask members exist. (pythonGH-105542)

    When inverting a Flag member (or boundary STRICT), only consider other canonical flags; when inverting an IntFlag member (or boundary KEEP), also consider aliases.

commit 8e75592
Author: Alex Waygood <Alex.Waygood@Gmail.com>
Date:   Fri Jun 9 16:08:57 2023 +0100

    Miscellaneous improvements to the typing docs (python#105529)

    Mostly, these are changes so that we use shorter sentences and shorter paragraphs. In particular, I've tried to make the first sentence introducing each object in the typing API short and declarative.

commit b8fa7bd
Author: Erlend E. Aasland <erlend.aasland@protonmail.com>
Date:   Fri Jun 9 15:36:59 2023 +0200

    pythongh-105557: Remove duplicate sqlite3 test method (python#105558)

    test_func_return_too_large_int() was defined twice.
    Keep only the redefined method, as that also checks the tracebacks.

commit 9bf8d82
Author: Thomas Grainger <tagrain@gmail.com>
Date:   Fri Jun 9 14:29:09 2023 +0100

    pythongh-94924: support `inspect.iscoroutinefunction` in `create_autospec(async_def)` (python#94962)

    * support inspect.iscoroutinefunction in create_autospec(async_def)

    * test create_autospec with inspect.iscoroutine and inspect.iscoroutinefunction

    * test when create_autospec functions check their signature

commit 0f885ff
Author: Victor Stinner <vstinner@python.org>
Date:   Fri Jun 9 14:50:31 2023 +0200

    pythongh-105407: Remove unused imports (python#105554)
@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 new features, bugs and security fixes release-blocker type-crash A hard crash of the interpreter, possibly with a core dump
Projects
6 participants