Skip to content

Python/pystate.c:2218: _PyThreadState_PopFrame: Assertion `tstate->datastack_top >= base' failed. #93252

Closed
@The-Compiler

Description

@The-Compiler

Crash report

When running my application (qutebrowser) in a way it spawns/kills a lot of threads, after around 140 (?) threads spawned/killed, I get (depending on which commit I'm testing) either of:

Python/pystate.c:2080: _PyThreadState_PopFrame: Assertion `tstate->datastack_top >= locals' failed
Python/pystate.c:2218: _PyThreadState_PopFrame: Assertion `tstate->datastack_top >= base' failed.

Referring to:

assert(tstate->datastack_top >= base);

I've spent hours on trying to find a more minimal reproducer, but unfortunately, the best I can offer without some help about what I could try next is this:

  • git clone https://github.com/qutebrowser/qutebrowser.git
  • cd qutebrowser
  • python3.11 -m venv .venv
  • .venv/bin/pip install -r requirements.txt -r misc/requirements/requirements-pyqt.txt
  • Reproducing manually:
    • .venv/bin/python3 -m qutebrowser --temp-basedir -s tabs.last_close blank -s qt.chromium.sandboxing disable-seccomp-bpf
    • Hit d which will close the current tab
    • Hit u which will reopen it
    • Repeat the above around 47 times
  • Reproducing automatically:
    • Save the code below to a crasher.py and make it executable
    • .venv/bin/python3 -m qutebrowser --temp-basedir -s tabs.last_close blank -s qt.chromium.sandboxing disable-seccomp-bpf ":later 1000 spawn -u $PWD/crasher.py"
#!/usr/bin/python3
import os
import time

def run(cmd):
    with open(os.environ["QUTE_FIFO"], "w") as f:
        f.write(f"{cmd}\n")

for _ in range(100):
    run("tab-close")
    time.sleep(0.2)
    run("undo")
    time.sleep(0.2)

run("quit")

After some time (due to having to skip most commits because of #92112), I was able to bisect this to:

ae0a2b7 ("bpo-44590: Lazily allocate frame objects (GH-27077)", @markshannon)

Error messages

Stacktrace:

#0  0x00007ffff7d1636c in ?? () from /usr/lib/libc.so.6
#1  0x00007ffff7cc6838 in raise () from /usr/lib/libc.so.6
#2  0x00007ffff7cb0535 in abort () from /usr/lib/libc.so.6
#3  0x00007ffff7cb045c in ?? () from /usr/lib/libc.so.6
#4  0x00007ffff7cbf366 in __assert_fail () from /usr/lib/libc.so.6
#5  0x000055555580316e in _PyThreadState_PopFrame (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, frame=frame@entry=0x7ffff7821f70) at Python/pystate.c:2218
#6  0x00005555557aa94e in _PyEvalFrameClearAndPop (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, frame=frame@entry=0x7ffff7821f70) at Python/ceval.c:6442
#7  0x00005555557aa99d in pop_frame (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, frame=frame@entry=0x7ffff7821f70) at Python/ceval.c:1682
#8  0x00005555557b08bc in _PyEval_EvalFrameDefault (tstate=0x555555b31178 <_PyRuntime+166136>, frame=0x7ffff7821f70, throwflag=<optimized out>) at Python/ceval.c:2497
#9  0x00005555557be97d in _PyEval_EvalFrame (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, frame=frame@entry=0x7ffff7821de8, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:66
#10 0x00005555557bea8e in _PyEval_Vector (tstate=0x555555b31178 <_PyRuntime+166136>, func=<optimized out>, locals=locals@entry=0x0, args=<optimized out>, argcount=<optimized out>, kwnames=<optimized out>) at Python/ceval.c:6468
#11 0x00005555556cfa0f in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:393
#12 0x00005555556cf5e8 in _PyVectorcall_Call (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, func=0x5555556cf9bf <_PyFunction_Vectorcall>, callable=callable@entry=<function at remote 0x7fffe535f750>, 
    tuple=tuple@entry=(<CommandDispatcher(_win_id=0, _tabbed_browser=<TabbedBrowser(widget=<TabWidget() at remote 0x7fffe4fb00f0>, _win_id=0, _tab_insert_idx_left=0, _tab_insert_idx_right=1, is_shutting_down=False, undo_stack=<collections.deque at remote 0x7fffe50b1350>, _filter=<SignalFilter(_win_id=0) at remote 0x7fffe4fb05f0>, _now_focused=<WebEngineTab(is_private=False, win_id=0, tab_id=49, registry=<ObjectRegistry(data={'tab': <...>}, _partial_objs={'tab': <functools.partial at remote 0x7fff85b89320>}, command_only=[]) at remote 0x7fffe52f2a40>, data=<TabData(keep_icon=False, viewing_source=False, inspector=None, open_target=<ClickTarget(_value_=1, _name_='normal', __objclass__=<EnumType(_generate_next_value_=<function at remote 0x7ffff769a780>, __module__='qutebrowser.utils.usertypes', __doc__='How to open a clicked link.', _new_member_=<built-in method __new__ of type object at remote 0x555555a1d800>, _use_args_=False, _member_names_=['normal', 'tab', 'tab_bg', 'window', 'hover'], _member_map_={'normal': <...>, 'tab': <Clic...(truncated), kwargs=kwargs@entry={}) at Objects/call.c:245
#13 0x00005555556cf951 in _PyObject_Call (tstate=0x555555b31178 <_PyRuntime+166136>, callable=callable@entry=<function at remote 0x7fffe535f750>, 
    args=args@entry=(<CommandDispatcher(_win_id=0, _tabbed_browser=<TabbedBrowser(widget=<TabWidget() at remote 0x7fffe4fb00f0>, _win_id=0, _tab_insert_idx_left=0, _tab_insert_idx_right=1, is_shutting_down=False, undo_stack=<collections.deque at remote 0x7fffe50b1350>, _filter=<SignalFilter(_win_id=0) at remote 0x7fffe4fb05f0>, _now_focused=<WebEngineTab(is_private=False, win_id=0, tab_id=49, registry=<ObjectRegistry(data={'tab': <...>}, _partial_objs={'tab': <functools.partial at remote 0x7fff85b89320>}, command_only=[]) at remote 0x7fffe52f2a40>, data=<TabData(keep_icon=False, viewing_source=False, inspector=None, open_target=<ClickTarget(_value_=1, _name_='normal', __objclass__=<EnumType(_generate_next_value_=<function at remote 0x7ffff769a780>, __module__='qutebrowser.utils.usertypes', __doc__='How to open a clicked link.', _new_member_=<built-in method __new__ of type object at remote 0x555555a1d800>, _use_args_=False, _member_names_=['normal', 'tab', 'tab_bg', 'window', 'hover'], _member_map_={'normal': <...>, 'tab': <Clic...(truncated), kwargs=kwargs@entry={}) at Objects/call.c:328
#14 0x00005555556cf999 in PyObject_Call (callable=callable@entry=<function at remote 0x7fffe535f750>, 
    args=args@entry=(<CommandDispatcher(_win_id=0, _tabbed_browser=<TabbedBrowser(widget=<TabWidget() at remote 0x7fffe4fb00f0>, _win_id=0, _tab_insert_idx_left=0, _tab_insert_idx_right=1, is_shutting_down=False, undo_stack=<collections.deque at remote 0x7fffe50b1350>, _filter=<SignalFilter(_win_id=0) at remote 0x7fffe4fb05f0>, _now_focused=<WebEngineTab(is_private=False, win_id=0, tab_id=49, registry=<ObjectRegistry(data={'tab': <...>}, _partial_objs={'tab': <functools.partial at remote 0x7fff85b89320>}, command_only=[]) at remote 0x7fffe52f2a40>, data=<TabData(keep_icon=False, viewing_source=False, inspector=None, open_target=<ClickTarget(_value_=1, _name_='normal', __objclass__=<EnumType(_generate_next_value_=<function at remote 0x7ffff769a780>, __module__='qutebrowser.utils.usertypes', __doc__='How to open a clicked link.', _new_member_=<built-in method __new__ of type object at remote 0x555555a1d800>, _use_args_=False, _member_names_=['normal', 'tab', 'tab_bg', 'window', 'hover'], _member_map_={'normal': <...>, 'tab': <Clic...(truncated), kwargs=kwargs@entry={}) at Objects/call.c:355
#15 0x00005555557ad14b in do_call_core (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, func=func@entry=<function at remote 0x7fffe535f750>, 
    callargs=callargs@entry=(<CommandDispatcher(_win_id=0, _tabbed_browser=<TabbedBrowser(widget=<TabWidget() at remote 0x7fffe4fb00f0>, _win_id=0, _tab_insert_idx_left=0, _tab_insert_idx_right=1, is_shutting_down=False, undo_stack=<collections.deque at remote 0x7fffe50b1350>, _filter=<SignalFilter(_win_id=0) at remote 0x7fffe4fb05f0>, _now_focused=<WebEngineTab(is_private=False, win_id=0, tab_id=49, registry=<ObjectRegistry(data={'tab': <...>}, _partial_objs={'tab': <functools.partial at remote 0x7fff85b89320>}, command_only=[]) at remote 0x7fffe52f2a40>, data=<TabData(keep_icon=False, viewing_source=False, inspector=None, open_target=<ClickTarget(_value_=1, _name_='normal', __objclass__=<EnumType(_generate_next_value_=<function at remote 0x7ffff769a780>, __module__='qutebrowser.utils.usertypes', __doc__='How to open a clicked link.', _new_member_=<built-in method __new__ of type object at remote 0x555555a1d800>, _use_args_=False, _member_names_=['normal', 'tab', 'tab_bg', 'window', 'hover'], _member_map_={'normal': <...>, 'tab': <Clic...(truncated), kwdict=kwdict@entry={}, use_tracing=0) at Python/ceval.c:7365
#16 0x00005555557bd006 in _PyEval_EvalFrameDefault (tstate=0x555555b31178 <_PyRuntime+166136>, frame=0x7ffff7821d18, throwflag=<optimized out>) at Python/ceval.c:5431
#17 0x00005555557be97d in _PyEval_EvalFrame (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, frame=frame@entry=0x7ffff7821bb8, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:66
#18 0x00005555557bea8e in _PyEval_Vector (tstate=0x555555b31178 <_PyRuntime+166136>, func=<optimized out>, locals=locals@entry=0x0, args=<optimized out>, argcount=<optimized out>, kwnames=<optimized out>) at Python/ceval.c:6468
#19 0x00005555556cfa0f in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:393
#20 0x00005555556d224c in _PyObject_VectorcallTstate (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, callable=callable@entry=<function at remote 0x7fffe61af960>, args=args@entry=0x7fffffffb220, nargsf=nargsf@entry=2, 
    kwnames=kwnames@entry=0x0) at ./Include/internal/pycore_call.h:92
#21 0x00005555556d239f in method_vectorcall (method=<optimized out>, args=0x7fffe534d968, nargsf=<optimized out>, kwnames=0x0) at Objects/classobject.c:89
#22 0x00005555556cf5e8 in _PyVectorcall_Call (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, func=0x5555556d22ce <method_vectorcall>, callable=callable@entry=<method at remote 0x7fffe54aad50>, tuple=tuple@entry=('undo',), 
    kwargs=kwargs@entry=0x0) at Objects/call.c:245
#23 0x00005555556cf951 in _PyObject_Call (tstate=0x555555b31178 <_PyRuntime+166136>, callable=<method at remote 0x7fffe54aad50>, args=('undo',), kwargs=0x0) at Objects/call.c:328
--Type <RET> for more, q to quit, c to continue without paging--
#24 0x00005555556cf999 in PyObject_Call (callable=<optimized out>, args=<optimized out>, kwargs=<optimized out>) at Objects/call.c:355
#25 0x00007ffff66b73f0 in PyQtSlot::call(_object*, _object*) const () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#26 0x00007ffff66b7898 in PyQtSlot::invoke(void**, _object*, void*, bool) const () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#27 0x00007ffff66b7a50 in PyQtSlot::invoke(void**, _object*, void*) const () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#28 0x00007ffff66ba3ad in qt_metacall_worker(_sipSimpleWrapper*, _typeobject*, _sipTypeDef*, QMetaObject::Call, int, void**) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#29 0x00007ffff66ba17c in qt_metacall_worker(_sipSimpleWrapper*, _typeobject*, _sipTypeDef*, QMetaObject::Call, int, void**) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#30 0x00007ffff669d3cd in sipQObject::qt_metacall(QMetaObject::Call, int, void**) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#31 0x00007ffff5ed5f97 in void doActivate<false>(QObject*, int, void**) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
#32 0x00007ffff66ba1fe in qt_metacall_worker(_sipSimpleWrapper*, _typeobject*, _sipTypeDef*, QMetaObject::Call, int, void**) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#33 0x00007ffff66ba17c in qt_metacall_worker(_sipSimpleWrapper*, _typeobject*, _sipTypeDef*, QMetaObject::Call, int, void**) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#34 0x00007ffff669d3cd in sipQObject::qt_metacall(QMetaObject::Call, int, void**) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#35 0x00007ffff5ed5f97 in void doActivate<false>(QObject*, int, void**) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
#36 0x00007ffff66b3f6e in pyqtBoundSignal_emit () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#37 0x00005555556db2f0 in method_vectorcall_VARARGS (func=<method_descriptor at remote 0x7ffff73238f0>, args=0x7ffff7821b98, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/descrobject.c:330
#38 0x00005555556cfd83 in _PyObject_VectorcallTstate (tstate=0x555555b31178 <_PyRuntime+166136>, callable=callable@entry=<method_descriptor at remote 0x7ffff73238f0>, args=args@entry=0x7ffff7821b98, nargsf=9223372036854775810, 
    kwnames=kwnames@entry=0x0) at ./Include/internal/pycore_call.h:92
#39 0x00005555556cfe5a in PyObject_Vectorcall (callable=callable@entry=<method_descriptor at remote 0x7ffff73238f0>, args=args@entry=0x7ffff7821b98, nargsf=<optimized out>, kwnames=kwnames@entry=0x0) at Objects/call.c:299
#40 0x00005555557ba3da in _PyEval_EvalFrameDefault (tstate=0x555555b31178 <_PyRuntime+166136>, frame=0x7ffff7821b28, throwflag=<optimized out>) at Python/ceval.c:4826
#41 0x00005555557be97d in _PyEval_EvalFrame (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, frame=frame@entry=0x7ffff7821b28, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:66
#42 0x00005555557bea8e in _PyEval_Vector (tstate=0x555555b31178 <_PyRuntime+166136>, func=<optimized out>, locals=locals@entry=0x0, args=<optimized out>, argcount=<optimized out>, kwnames=<optimized out>) at Python/ceval.c:6468
#43 0x00005555556cfa0f in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:393
#44 0x00005555556d224c in _PyObject_VectorcallTstate (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, callable=callable@entry=<function at remote 0x7fffe5365f40>, args=args@entry=0x7fffffffba38, nargsf=nargsf@entry=1, 
    kwnames=kwnames@entry=0x0) at ./Include/internal/pycore_call.h:92
#45 0x00005555556d2467 in method_vectorcall (method=<optimized out>, args=0x555555b16e00 <_PyRuntime+58752>, nargsf=<optimized out>, kwnames=0x0) at Objects/classobject.c:67
#46 0x00005555556cf5e8 in _PyVectorcall_Call (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, func=0x5555556d22ce <method_vectorcall>, callable=callable@entry=<method at remote 0x7fffe4f07ef0>, tuple=tuple@entry=(), 
    kwargs=kwargs@entry=0x0) at Objects/call.c:245
#47 0x00005555556cf951 in _PyObject_Call (tstate=0x555555b31178 <_PyRuntime+166136>, callable=<method at remote 0x7fffe4f07ef0>, args=(), kwargs=0x0) at Objects/call.c:328
#48 0x00005555556cf999 in PyObject_Call (callable=<optimized out>, args=<optimized out>, kwargs=<optimized out>) at Objects/call.c:355
#49 0x00007ffff66b73f0 in PyQtSlot::call(_object*, _object*) const () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#50 0x00007ffff66b7898 in PyQtSlot::invoke(void**, _object*, void*, bool) const () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#51 0x00007ffff66b7a50 in PyQtSlot::invoke(void**, _object*, void*) const () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#52 0x00007ffff66ba3ad in qt_metacall_worker(_sipSimpleWrapper*, _typeobject*, _sipTypeDef*, QMetaObject::Call, int, void**) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#53 0x00007ffff669d3cd in sipQObject::qt_metacall(QMetaObject::Call, int, void**) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#54 0x00007ffff5ed5f97 in void doActivate<false>(QObject*, int, void**) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
#55 0x00007ffff5ed9f8b in QSocketNotifier::activated(int, QSocketNotifier::QPrivateSignal) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
#56 0x00007ffff5eda7c2 in QSocketNotifier::event(QEvent*) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
#57 0x00007ffff6684423 in sipQSocketNotifier::event(QEvent*) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtCore.abi3.so
#58 0x00007ffff296343c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Widgets.so.5
#59 0x00007ffff2969f20 in QApplication::notify(QObject*, QEvent*) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Widgets.so.5
#60 0x00007ffff346bcd6 in sipQApplication::notify(QObject*, QEvent*) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtWidgets.abi3.so
#61 0x00007ffff5e9d808 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
#62 0x00007ffff5ef9d98 in socketNotifierSourceDispatch(_GSource*, int (*)(void*), void*) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
#63 0x00007ffff691a163 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#64 0x00007ffff69709e9 in ?? () from /usr/lib/libglib-2.0.so.0
#65 0x00007ffff69176c5 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#66 0x00007ffff5ef91cc in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
--Type <RET> for more, q to quit, c to continue without paging--
#67 0x00007ffff5e9c21a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
#68 0x00007ffff5ea51d3 in QCoreApplication::exec() () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
#69 0x00007ffff32b65a1 in meth_QApplication_exec () from /home/florian/proj/qutebrowser/git/.venv-thread/lib/python3.11/site-packages/PyQt5/QtWidgets.abi3.so
#70 0x0000555555717472 in cfunction_call (func=<built-in method exec of Application object at remote 0x7fffe523ac10>, args=(), kwargs=0x0) at Objects/methodobject.c:553
#71 0x00005555556cfcc0 in _PyObject_MakeTpCall (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, callable=callable@entry=<built-in method exec of Application object at remote 0x7fffe523ac10>, args=args@entry=0x7ffff781e390, 
    nargs=<optimized out>, keywords=keywords@entry=0x0) at Objects/call.c:214
#72 0x00005555556cfe03 in _PyObject_VectorcallTstate (tstate=0x555555b31178 <_PyRuntime+166136>, callable=callable@entry=<built-in method exec of Application object at remote 0x7fffe523ac10>, args=args@entry=0x7ffff781e390, 
    nargsf=<optimized out>, kwnames=kwnames@entry=0x0) at ./Include/internal/pycore_call.h:90
#73 0x00005555556cfe5a in PyObject_Vectorcall (callable=callable@entry=<built-in method exec of Application object at remote 0x7fffe523ac10>, args=args@entry=0x7ffff781e390, nargsf=<optimized out>, kwnames=kwnames@entry=0x0)
    at Objects/call.c:299
#74 0x00005555557ba3da in _PyEval_EvalFrameDefault (tstate=0x555555b31178 <_PyRuntime+166136>, frame=0x7ffff781e338, throwflag=<optimized out>) at Python/ceval.c:4826
#75 0x00005555557be97d in _PyEval_EvalFrame (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, frame=frame@entry=0x7ffff781e1b8, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:66
#76 0x00005555557bea8e in _PyEval_Vector (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, func=func@entry=0x7ffff789bd80, 
    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 0x7ffff7663f30>, '__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-311.pyc') at remote 0x7ffff7663da0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff78e3050>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-311.pyc', 'sys': <module at remote 0x7ffff78d3770>, 'qutebrowser': <module at remote 0x7ffff7641190>}, args=args@entry=0x0, argcount=argcount@entry=0, kwnames=kwnames@entry=0x0) at Python/ceval.c:6468
#77 0x00005555557beb99 in PyEval_EvalCode (co=co@entry=<code at remote 0x7ffff78b9a60>, 
    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 0x7ffff7663f30>, '__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-311.pyc') at remote 0x7ffff7663da0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff78e3050>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-311.pyc', 'sys': <module at remote 0x7ffff78d3770>, 'qutebrowser': <module at remote 0x7ffff7641190>}, 
    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 0x7ffff7663f30>, '__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-311.pyc') at remote 0x7ffff7663da0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff78e3050>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-311.pyc', 'sys': <module at remote 0x7ffff78d3770>, 'qutebrowser': <module at remote 0x7ffff7641190>}) at Python/ceval.c:1207
#78 0x00005555557a5d7f in builtin_exec_impl (module=module@entry=<module at remote 0x7ffff78e3050>, source=<code at remote 0x7ffff78b9a60>, 
    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 0x7ffff7663f30>, '__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-311.pyc') at remote 0x7ffff7663da0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff78e3050>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-311.pyc', 'sys': <module at remote 0x7ffff78d3770>, 'qutebrowser': <module at remote 0x7ffff7641190>}, 
    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 0x7ffff7663f30>, '__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-311.pyc') at remote 0x7ffff7663da0>, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff78e3050>, '__file__': '/home/florian/proj/qutebrowser/git/qutebrowser/__main__.py', '__cached__': '/home/florian/proj/qutebrowser/git/qutebrowser/__pycache__/__main__.cpython-311.pyc', 'sys': <module at remote 0x7ffff78d3770>, 'qutebrowser': <module at remote 0x7ffff7641190>}, closure=0x0) at Python/bltinmodule.c:1075
#79 0x00005555557a5e92 in builtin_exec (module=<module at remote 0x7ffff78e3050>, args=<optimized out>, args@entry=0x7ffff781e180, nargs=nargs@entry=2, kwnames=kwnames@entry=0x0) at Python/clinic/bltinmodule.c.h:465
#80 0x0000555555716d1b in cfunction_vectorcall_FASTCALL_KEYWORDS (func=<built-in method exec of module object at remote 0x7ffff78e3050>, args=0x7ffff781e180, nargsf=<optimized out>, kwnames=0x0) at Objects/methodobject.c:443
#81 0x00005555556cfd83 in _PyObject_VectorcallTstate (tstate=0x555555b31178 <_PyRuntime+166136>, callable=callable@entry=<built-in method exec of module object at remote 0x7ffff78e3050>, args=args@entry=0x7ffff781e180, 
    nargsf=9223372036854775810, kwnames=kwnames@entry=0x0) at ./Include/internal/pycore_call.h:92
#82 0x00005555556cfe5a in PyObject_Vectorcall (callable=callable@entry=<built-in method exec of module object at remote 0x7ffff78e3050>, args=args@entry=0x7ffff781e180, nargsf=<optimized out>, kwnames=kwnames@entry=0x0)
    at Objects/call.c:299
--Type <RET> for more, q to quit, c to continue without paging--
#83 0x00005555557ba3da in _PyEval_EvalFrameDefault (tstate=0x555555b31178 <_PyRuntime+166136>, frame=0x7ffff781e0d8, throwflag=<optimized out>) at Python/ceval.c:4826
#84 0x00005555557be97d in _PyEval_EvalFrame (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, frame=frame@entry=0x7ffff781e020, throwflag=throwflag@entry=0) at ./Include/internal/pycore_ceval.h:66
#85 0x00005555557bea8e in _PyEval_Vector (tstate=0x555555b31178 <_PyRuntime+166136>, func=<optimized out>, locals=locals@entry=0x0, args=<optimized out>, argcount=<optimized out>, kwnames=<optimized out>) at Python/ceval.c:6468
#86 0x00005555556cfa0f in _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/call.c:393
#87 0x00005555556cf5e8 in _PyVectorcall_Call (tstate=tstate@entry=0x555555b31178 <_PyRuntime+166136>, func=0x5555556cf9bf <_PyFunction_Vectorcall>, callable=callable@entry=<function at remote 0x7ffff7646ba0>, 
    tuple=tuple@entry=('qutebrowser', True), kwargs=kwargs@entry=0x0) at Objects/call.c:245
#88 0x00005555556cf951 in _PyObject_Call (tstate=0x555555b31178 <_PyRuntime+166136>, callable=callable@entry=<function at remote 0x7ffff7646ba0>, args=args@entry=('qutebrowser', True), kwargs=kwargs@entry=0x0) at Objects/call.c:328
#89 0x00005555556cf999 in PyObject_Call (callable=callable@entry=<function at remote 0x7ffff7646ba0>, args=args@entry=('qutebrowser', True), kwargs=kwargs@entry=0x0) at Objects/call.c:355
#90 0x0000555555823bf4 in pymain_run_module (modname=<optimized out>, set_argv0=set_argv0@entry=1) at Modules/main.c:300
#91 0x00005555558246d5 in pymain_run_python (exitcode=exitcode@entry=0x7fffffffc9f4) at Modules/main.c:595
#92 0x0000555555824964 in Py_RunMain () at Modules/main.c:680
#93 0x00005555558249de in pymain_main (args=args@entry=0x7fffffffca50) at Modules/main.c:710
#94 0x0000555555824aad in Py_BytesMain (argc=<optimized out>, argv=<optimized out>) at Modules/main.c:734
#95 0x0000555555643732 in main (argc=<optimized out>, argv=<optimized out>) at ./Programs/python.c:15

Debugging:

(gdb) p base
$1 = (PyObject **) 0x7ffff7821f70
(gdb) p tstate->datastack_top
$2 = (PyObject **) 0x7fffe5872090
(gdb) pp tstate tstate.datastack_top
tstate = 
   autoderefcount="1",[
      prev = <PyThreadState*> = {"0x0"}
      next = <PyThreadState*> = {"0x0"}
      interp = autoderefcount="1",<PyInterpreterState> = {"{...}"}
      _initialized = <int> = {"1"}
      _static = <int> = {"1"}
      recursion_remaining = <int> = {"985"}
      recursion_limit = <int> = {"1000"}
      recursion_headroom = <int> = {"0"}
      tracing = <int> = {"0"}
      tracing_what = <int> = {"0"}
      cframe = autoderefcount="1",<_PyCFrame> = {"{...}"}
      c_profilefunc = <Py_tracefunc> = {"0x0"}
      c_tracefunc = <Py_tracefunc> = {"0x0"}
      c_profileobj = <PyObject*> = {"0x0"}
      c_traceobj = <PyObject*> = {"0x0"}
      curexc_type = <PyObject*> = {"0x0"}
      curexc_value = <PyObject*> = {"0x0"}
      curexc_traceback = <PyObject*> = {"0x0"}
      exc_info = autoderefcount="1",<_PyErr_StackItem> = {"{...}"}
      dict = autoderefcount="1",<PyObject> = {"{...}"}
      gilstate_counter = <int> = {"4"}
      async_exc = <PyObject*> = {"0x0"}
      thread_id = <long unsigned int> = {"140737350489920"}
      native_thread_id = <long unsigned int> = {"2990635"}
      trash_delete_nesting = <int> = {"0"}
      trash_delete_later = <PyObject*> = {"0x0"}
      on_delete = <void (void *)*> = {"0x55555587c8e6 <release_sentinel>"}
      on_delete_data = <void*> = {"0x7ffff18dc750"}
      coroutine_origin_tracking_depth = <int> = {"0"}
      async_gen_firstiter = <PyObject*> = {"0x0"}
      async_gen_finalizer = <PyObject*> = {"0x0"}
      context = <PyObject*> = {"0x0"}
      context_ver = <uint64_t> = {"1"}
      id = <uint64_t> = {"1"}
      trace_info = <PyTraceInfo> = {"{...}"}
      datastack_chunk = autoderefcount="1",<_PyStackChunk> = {"{...}"}
      datastack_top = autoderefcount="2",[
         [class] = "<class 'function'>"
         [super class] = "<class 'object'>"
         [meta type] = "<class 'type'>"
         ob_refcnt = <Py_ssize_t> = {"2"}
         ob_type = autoderefcount="1",<PyTypeObject> = {"{...}"}
      ],<PyObject> = {"{...}"}
      datastack_limit = <PyObject*> = {"0x8fc02fc04"}
      exc_state = <_PyErr_StackItem> = {"{...}"}
      root_cframe = <_PyCFrame> = {"{...}"}
   ],<PyThreadState> = {"{...}"}

Happy to try more or report some debugging information, but I'm afraid I'm stuck at this point.

Your environment

  • CPython versions tested on: 3.11.0b1
  • Operating system and architecture: Arch Linux, x86_64

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.11only security fixes3.12only security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)release-blockertype-crashA hard crash of the interpreter, possibly with a core dump

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions