Tab discard may lock up browser
This issue is intended to track and discuss the problem identified in https://github.com/qutebrowser/qutebrowser/issues/8547#issuecomment-3677784972 and subsequent comments.
Tl;dr: Discarding (i.e. unloading and freeing up memory) of inactive tabs has a small chance to lock up the entire browser session. Freezing (stopping processing on them, but keeping them in memory) inactive tabs works fine. Neither functionality is merged into qutebrowser at the time of writing.
Observed behaviour: the browser locks up, stops rendering, stops outputting debug information, and stops acting on signals. Only a SIGKILL gets it out of this state.
I have only been able to reproduce this sporadically, and only on the first batch of tab discards the browser does. It does not seem to be the case that multiple tabs must be discarded at the same time for this to trigger, but I do seem more likely to hit it the more tabs a session has.
This seems to be some kind of race condition while destroying the renderer, backtrace below. It seems to be very deep down in qtwebengine's vendored chromium; in the end it calls this SendMojoMessage() function and then ends up waiting indefinitely in a mutex.
Given the function names, I get the impression this message is not being sent to any QtWebEngineProcs, but there are a ton of QtWebEngineProcs under this main PID.
(gdb) bt
#0 __syscall_cancel_arch () at ../sysdeps/unix/sysv/linux/x86_64/syscall_cancel.S:56
#1 0x00007f7e3149316c in __internal_syscall_cancel (a1=<optimized out>, a2=<optimized out>, a3=<optimized out>, a4=<optimized out>, a5=a5@entry=0,
a6=a6@entry=4294967295, nr=202) at cancellation.c:49
#2 0x00007f7e314937dc in __futex_abstimed_wait_common64 (private=0, futex_word=0x7ffda8abe640, expected=<optimized out>, op=<optimized out>, abstime=0x0, cancel=true)
at futex-internal.c:57
#3 __futex_abstimed_wait_common (futex_word=futex_word@entry=0x7ffda8abe640, expected=<optimized out>, clockid=clockid@entry=0, abstime=abstime@entry=0x0,
private=private@entry=0, cancel=cancel@entry=true) at futex-internal.c:87
#4 0x00007f7e3149383f in __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7ffda8abe640, expected=<optimized out>, clockid=clockid@entry=0,
abstime=abstime@entry=0x0, private=private@entry=0) at futex-internal.c:139
#5 0x00007f7e31495e9e in __pthread_cond_wait_common (cond=0x7ffda8abe620, mutex=0x7ffda8abe5f8, clockid=0, abstime=0x0) at pthread_cond_wait.c:421
#6 ___pthread_cond_wait (cond=0x7ffda8abe620, mutex=0x7ffda8abe5f8) at pthread_cond_wait.c:453
#7 0x00007f7e228bbeec in base::ConditionVariable::Wait () at ./../../../../../qtwebengine/src/3rdparty/chromium/base/synchronization/condition_variable_posix.cc:74
#8 0x00007f7e228ec49c in base::WaitableEvent::TimedWaitImpl () at ./../../../../../qtwebengine/src/3rdparty/chromium/base/synchronization/waitable_event_posix.cc:192
#9 0x00007f7e228624ee in base::WaitableEvent::TimedWait () at ./../../../../../qtwebengine/src/3rdparty/chromium/base/synchronization/waitable_event.cc:68
#10 0x00007f7e231e0614 in SendMessageWithResponder () at ../../../../../qtwebengine/src/3rdparty/chromium/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:444
#11 0x00007f7e231efec7 in mojo::internal::ThreadSafeForwarderBase::AcceptWithResponder ()
at ../../../../../qtwebengine/src/3rdparty/chromium/mojo/public/cpp/bindings/lib/thread_safe_forwarder_base.cc:32
#12 0x00007f7e231fe0cc in mojo::internal::SendMojoMessage () at ../../../../../qtwebengine/src/3rdparty/chromium/mojo/public/cpp/bindings/lib/send_message_helper.cc:42
#13 0x00007f7e1e687b64 in gpu::mojom::GpuChannelProxy::WaitForGetOffsetInRange () at ./gen/gpu/ipc/common/gpu_channel.mojom.cc:3202
#14 0x00007f7e1ea22ea6 in gpu::CommandBufferProxyImpl::WaitForGetOffsetInRange ()
at ../../../../../qtwebengine/src/3rdparty/chromium/gpu/ipc/client/command_buffer_proxy_impl.cc:317
#15 0x00007f7e1e664432 in gpu::CommandBufferHelper::WaitForGetOffsetInRange ()
at ./../../../../../qtwebengine/src/3rdparty/chromium/gpu/command_buffer/client/cmd_buffer_helper.cc:167
#16 0x00007f7e1e66c6a9 in gpu::CommandBufferHelper::Finish () at ./../../../../../qtwebengine/src/3rdparty/chromium/gpu/command_buffer/client/cmd_buffer_helper.cc:227
#17 0x00007f7e1ea10c15 in gpu::raster::RasterImplementation::FinishHelper ()
at ../../../../../qtwebengine/src/3rdparty/chromium/gpu/command_buffer/client/raster_implementation.cc:1003
#18 0x00007f7e23fb8de2 in cc::LayerTreeHostImpl::ReleaseLayerTreeFrameSink () at ./../../../../../qtwebengine/src/3rdparty/chromium/cc/trees/layer_tree_host_impl.cc:4335
#19 0x00007f7e23ffba49 in cc::SingleThreadProxy::Stop () at ./../../../../../qtwebengine/src/3rdparty/chromium/cc/trees/single_thread_proxy.cc:453
#20 0x00007f7e23fb13d2 in cc::LayerTreeHost::~LayerTreeHost () at ./../../../../../qtwebengine/src/3rdparty/chromium/cc/trees/layer_tree_host.cc:294
#21 0x00007f7e23fb1811 in cc::LayerTreeHost::~LayerTreeHost () at ./../../../../../qtwebengine/src/3rdparty/chromium/cc/trees/layer_tree_host.cc:299
#22 0x00007f7e23e8de2d in std::default_delete<cc::LayerTreeHost>::operator() () at /usr/include/c++/15.2.1/bits/unique_ptr.h:92
#23 std::__uniq_ptr_impl<cc::LayerTreeHost, std::default_delete<cc::LayerTreeHost> >::reset () at /usr/include/c++/15.2.1/bits/unique_ptr.h:204
#24 std::unique_ptr<cc::LayerTreeHost, std::default_delete<cc::LayerTreeHost> >::reset () at /usr/include/c++/15.2.1/bits/unique_ptr.h:511
#25 ui::Compositor::~Compositor () at ./../../../../../qtwebengine/src/3rdparty/chromium/ui/compositor/compositor.cc:313
#26 0x00007f7e1da91a07 in QtWebEngineCore::FlingingCompositor::~FlingingCompositor ()
at /usr/src/debug/qt6-webengine/qtwebengine/src/core/render_widget_host_view_qt.cpp:122
#27 QtWebEngineCore::FlingingCompositor::~FlingingCompositor () at /usr/src/debug/qt6-webengine/qtwebengine/src/core/render_widget_host_view_qt.cpp:122
#28 0x00007f7e1da96cb9 in std::default_delete<ui::Compositor>::operator() () at /usr/include/c++/15.2.1/bits/unique_ptr.h:92
#29 std::unique_ptr<ui::Compositor, std::default_delete<ui::Compositor> >::~unique_ptr () at /usr/include/c++/15.2.1/bits/unique_ptr.h:398
#30 QtWebEngineCore::RenderWidgetHostViewQt::~RenderWidgetHostViewQt () at /usr/src/debug/qt6-webengine/qtwebengine/src/core/render_widget_host_view_qt.cpp:210
#31 0x00007f7e1da9702d in QtWebEngineCore::RenderWidgetHostViewQt::~RenderWidgetHostViewQt ()
at /usr/src/debug/qt6-webengine/qtwebengine/src/core/render_widget_host_view_qt.cpp:210
#32 QtWebEngineCore::RenderWidgetHostViewQt::Destroy () at /usr/src/debug/qt6-webengine/qtwebengine/src/core/render_widget_host_view_qt.cpp:641
#33 0x00007f7e213ac28b in content::RenderWidgetHostImpl::Destroy ()
at ../../../../../qtwebengine/src/3rdparty/chromium/content/browser/renderer_host/render_widget_host_impl.cc:2349
#34 0x00007f7e213946de in content::RenderViewHostImpl::~RenderViewHostImpl ()
at ../../../../../qtwebengine/src/3rdparty/chromium/content/browser/renderer_host/render_view_host_impl.cc:380
#35 0x00007f7e21394d41 in content::RenderViewHostImpl::~RenderViewHostImpl ()
at ../../../../../qtwebengine/src/3rdparty/chromium/content/browser/renderer_host/render_view_host_impl.cc:397
#36 0x00007f7e21333beb in base::RefCounted<content::RenderViewHostImpl, base::DefaultRefCountedTraits<content::RenderViewHostImpl> >::DeleteInternal<content::RenderViewHostImpl> () at ../../../../../qtwebengine/src/3rdparty/chromium/base/memory/ref_counted.h:375
#37 base::DefaultRefCountedTraits<content::RenderViewHostImpl>::Destruct () at ../../../../../qtwebengine/src/3rdparty/chromium/base/memory/ref_counted.h:341
#38 base::RefCounted<content::RenderViewHostImpl, base::DefaultRefCountedTraits<content::RenderViewHostImpl> >::Release ()
at ../../../../../qtwebengine/src/3rdparty/chromium/base/memory/ref_counted.h:364
#39 base::RefCounted<content::RenderViewHostImpl, base::DefaultRefCountedTraits<content::RenderViewHostImpl> >::Release ()
at ../../../../../qtwebengine/src/3rdparty/chromium/base/memory/ref_counted.h:357
#40 scoped_refptr<content::RenderViewHostImpl>::Release () at ../../../../../qtwebengine/src/3rdparty/chromium/base/memory/scoped_refptr.h:395
#41 scoped_refptr<content::RenderViewHostImpl>::~scoped_refptr () at ../../../../../qtwebengine/src/3rdparty/chromium/base/memory/scoped_refptr.h:280
#42 scoped_refptr<content::RenderViewHostImpl>::reset () at ../../../../../qtwebengine/src/3rdparty/chromium/base/memory/scoped_refptr.h:311
#43 content::RenderFrameHostImpl::~RenderFrameHostImpl () at ../../../../../qtwebengine/src/3rdparty/chromium/content/browser/renderer_host/render_frame_host_impl.cc:2698
#44 0x00007f7e21335971 in content::RenderFrameHostImpl::~RenderFrameHostImpl ()
at ../../../../../qtwebengine/src/3rdparty/chromium/content/browser/renderer_host/render_frame_host_impl.cc:2729
#45 0x00007f7e21347b11 in std::default_delete<content::RenderFrameHostImpl>::operator() () at /usr/include/c++/15.2.1/bits/unique_ptr.h:92
#46 std::unique_ptr<content::RenderFrameHostImpl, std::default_delete<content::RenderFrameHostImpl> >::~unique_ptr () at /usr/include/c++/15.2.1/bits/unique_ptr.h:398
#47 content::RenderFrameHostManager::~RenderFrameHostManager ()
at ../../../../../qtwebengine/src/3rdparty/chromium/content/browser/renderer_host/render_frame_host_manager.cc:620
#48 0x00007f7e211ca677 in content::FrameTreeNode::~FrameTreeNode ()
at ../../../../../qtwebengine/src/3rdparty/chromium/content/browser/renderer_host/frame_tree_node.cc:324
#49 0x00007f7e211c1bda in content::FrameTree::~FrameTree () at ../../../../../qtwebengine/src/3rdparty/chromium/content/browser/renderer_host/frame_tree.cc:231
#50 0x00007f7e215f21f7 in content::WebContentsImpl::~WebContentsImpl ()
at ../../../../../qtwebengine/src/3rdparty/chromium/content/browser/web_contents/web_contents_impl.cc:1447
#51 0x00007f7e215f2721 in content::WebContentsImpl::~WebContentsImpl ()
at ../../../../../qtwebengine/src/3rdparty/chromium/content/browser/web_contents/web_contents_impl.cc:1447
#52 0x00007f7e1dad1972 in std::default_delete<content::WebContents>::operator() () at /usr/include/c++/15.2.1/bits/unique_ptr.h:92
#53 std::__uniq_ptr_impl<content::WebContents, std::default_delete<content::WebContents> >::reset () at /usr/include/c++/15.2.1/bits/unique_ptr.h:204
#54 std::unique_ptr<content::WebContents, std::default_delete<content::WebContents> >::reset () at /usr/include/c++/15.2.1/bits/unique_ptr.h:511
#55 QtWebEngineCore::WebContentsAdapter::discard () at /usr/src/debug/qt6-webengine/qtwebengine/src/core/web_contents_adapter.cpp:2246
#56 0x00007f7e1dad1cf8 in QtWebEngineCore::WebContentsAdapter::setLifecycleState () at /usr/src/debug/qt6-webengine/qtwebengine/src/core/web_contents_adapter.cpp:2106
#57 0x00007f7e227bc9b1 in QWebEnginePage::setLifecycleState (this=<optimized out>, state=<optimized out>)
at /usr/src/debug/qt6-webengine/qtwebengine/src/core/api/qwebenginepage.cpp:2457
#58 0x00007f7e0b6c371d in meth_QWebEnginePage_setLifecycleState (sipSelf=<optimized out>, sipArgs=<optimized out>)
at /usr/src/debug/pyqt6-webengine/pyqt6_webengine-6.10.0/build/QtWebEngineCore/sipQtWebEngineCoreQWebEnginePage.cpp:1824
#59 0x00007f7e31994d84 in cfunction_call (func=0x7f7d70353b50, args=0x7f7e0a642f50, kwargs=0x0) at Objects/methodobject.c:550
#60 0x00007f7e319611db in _PyObject_MakeTpCall (tstate=0x7f7e31d2fdf0 <_PyRuntime+283024>, callable=0x7f7d70353b50, args=<optimized out>, nargs=<optimized out>,
keywords=<optimized out>) at Objects/call.c:242
#61 0x00007f7e31972676 in _PyEval_EvalFrameDefault (tstate=<optimized out>, frame=<optimized out>, throwflag=<optimized out>) at Python/generated_cases.c.h:1850
#62 0x00007f7e319ce575 in _PyEval_EvalFrame (tstate=0x7f7e31d2fdf0 <_PyRuntime+283024>, frame=<optimized out>, throwflag=0) at ./Include/internal/pycore_ceval.h:121
#63 _PyEval_Vector (tstate=0x7f7e31d2fdf0 <_PyRuntime+283024>, func=0x7f7ddfdd3ce0, locals=0x0, args=0x7ffda8abffb0, argcount=2, kwnames=0x0) at Python/ceval.c:1820
#64 _PyFunction_Vectorcall (func=0x7f7ddfdd3ce0, stack=0x7ffda8abffb0, nargsf=2, kwnames=0x0) at Objects/call.c:413
#65 _PyObject_VectorcallTstate (tstate=0x7f7e31d2fdf0 <_PyRuntime+283024>, callable=0x7f7ddfdd3ce0, args=<optimized out>, nargsf=2, kwnames=0x0)
at ./Include/internal/pycore_call.h:168
#66 method_vectorcall (method=<optimized out>, args=<optimized out>, nargsf=<optimized out>, kwnames=0x0) at Objects/classobject.c:93
#67 0x00007f7e31a604da in _PyObject_VectorcallTstate (tstate=0x7f7e31d2fdf0 <_PyRuntime+283024>, callable=0x7f7d983e76c0, args=0x7f7d983a3bf8, nargsf=1,
kwnames=<optimized out>) at ./Include/internal/pycore_call.h:168
--Type <RET> for more, q to quit, c to continue without paging--c
#68 0x00007f7e2ffd3d2a in PyQtSlot::call (this=0x55eb936a9e00, callable=0x7f7d983daf20, args=0x7f7e31d00548 <_PyRuntime+88296>)
at ../../qpy/QtCore/qpycore_pyqtslot.cpp:235
#69 PyQtSlot::invoke (this=0x55eb936a9e00, qargs=<optimized out>, qargs@entry=0x7ffda8ac0270, self=<optimized out>, self@entry=0x0, result=result@entry=0x0,
no_receiver_check=<optimized out>) at ../../qpy/QtCore/qpycore_pyqtslot.cpp:152
#70 0x00007f7e2ffdc5d9 in PyQtSlot::invoke (this=<optimized out>, qargs=0x7ffda8ac0270, no_receiver_check=<optimized out>) at ../../qpy/QtCore/qpycore_pyqtslot.cpp:74
#71 PyQtSlotProxy::unislot (this=0x55eb936aa210, qargs=0x7ffda8ac0270) at ../../qpy/QtCore/qpycore_pyqtslotproxy.cpp:205
#72 PyQtSlotProxy::unislot (this=0x55eb936aa210, qargs=0x7ffda8ac0270) at ../../qpy/QtCore/qpycore_pyqtslotproxy.cpp:186
#73 PyQtSlotProxy::qt_metacall (this=0x55eb936aa210, _c=<optimized out>, _id=0, _a=0x7ffda8ac0270) at ../../qpy/QtCore/qpycore_pyqtslotproxy.cpp:170
#74 0x00007f7e2f7d77eb in doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=<optimized out>)
at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:4283
#75 0x00007f7e2f7dee5c in QMetaObject::activate<void, QTimer::QPrivateSignal> (sender=<optimized out>, mo=<optimized out>, local_signal_index=0, ret=0x0)
at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs.h:319
#76 QTimer::timeout (this=<optimized out>, _t1=...) at /usr/src/debug/qt6-base/build/src/corelib/Core_autogen/include/moc_qtimer.cpp:182
#77 QTimer::timerEvent (e=<optimized out>, this=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimer.cpp:331
#78 QTimer::timerEvent (this=this@entry=0x55eb936a9da0, e=e@entry=0x7ffda8ac04b0) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimer.cpp:325
#79 0x00007f7e2fec5024 in sipQTimer::timerEvent (this=0x55eb936a9da0, a0=0x7ffda8ac04b0) at /usr/src/debug/pyqt6/pyqt6-6.10.1/build/QtCore/sipQtCoreQTimer.cpp:198
#80 0x00007f7e2f7c4936 in QObject::event (this=this@entry=0x55eb936a9da0, e=e@entry=0x7ffda8ac04b0) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:1388
#81 0x00007f7e2febf1d4 in sipQTimer::event (this=0x55eb936a9da0, a0=0x7ffda8ac04b0) at /usr/src/debug/pyqt6/pyqt6-6.10.1/build/QtCore/sipQtCoreQTimer.cpp:167
#82 0x00007f7e2bd021c0 in QApplicationPrivate::notify_helper (this=this@entry=0x6bc71c8f73031d00, receiver=0x55eb936a9da0,
receiver@entry=0x7f7e2fec5024 <sipQTimer::timerEvent(QTimerEvent*)+164>, e=0x7ffda8ac04b0) at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:3305
#83 0x00007f7e2bd02f57 in QApplication::notify (this=this@entry=0x55eb8941b730, receiver=0x7f7e2fec5024 <sipQTimer::timerEvent(QTimerEvent*)+164>,
receiver@entry=0x55eb936a9da0, e=e@entry=0x7ffda8ac04b0) at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:3067
#84 0x00007f7e2c6c8fc7 in sipQApplication::notify (this=0x55eb8941b730, a0=0x55eb936a9da0, a1=0x7ffda8ac04b0)
at /usr/src/debug/pyqt6/pyqt6-6.10.1/build/QtWidgets/sipQtWidgetsQApplication.cpp:249
#85 0x00007f7e2f76a958 in QCoreApplication::notifyInternal2 (receiver=0x55eb936a9da0, event=0x7ffda8ac04b0)
at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1109
#86 0x00007f7e2f92c9af in QCoreApplication::sendEvent (receiver=<optimized out>, event=0x7ffda8ac04b0)
at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1549
#87 QTimerInfoList::activateTimers (this=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimerinfo_unix.cpp:426
#88 0x00007f7e2fa4ad99 in timerSourceDispatch (source=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:152
#89 0x00007f7e301c5f8d in g_main_dispatch (context=0x7f7e04001020) at ../glib/glib/gmain.c:3565
#90 0x00007f7e301c7657 in g_main_context_dispatch_unlocked (context=0x7f7e04001020) at ../glib/glib/gmain.c:4425
#91 g_main_context_iterate_unlocked (context=context@entry=0x7f7e04001020, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
at ../glib/glib/gmain.c:4490
#92 0x00007f7e301c7865 in g_main_context_iteration (context=0x7f7e04001020, may_block=1) at ../glib/glib/gmain.c:4556
#93 0x00007f7e2fa48152 in QEventDispatcherGlib::processEvents (this=0x55eb894830f0, flags=...)
at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:399
#94 0x00007f7e2f775786 in QEventLoop::processEvents (this=0x7ffda8ac0780, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:104
#95 QEventLoop::exec (this=0x7ffda8ac0780, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:186
#96 0x00007f7e2f76f3f1 in QCoreApplication::exec () at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1452
#97 0x00007f7e2bcfd32a in QApplication::exec () at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:2575
#98 0x00007f7e2c6c4f1c in meth_QApplication_exec (sipSelf=<optimized out>, sipArgs=<optimized out>)
at /usr/src/debug/pyqt6/pyqt6-6.10.1/build/QtWidgets/sipQtWidgetsQApplication.cpp:1289
#99 0x00007f7e31994d84 in cfunction_call (func=0x7f7e02751210, args=0x7f7e31d00548 <_PyRuntime+88296>, kwargs=0x0) at Objects/methodobject.c:550
#100 0x00007f7e319611db in _PyObject_MakeTpCall (tstate=0x7f7e31d2fdf0 <_PyRuntime+283024>, callable=0x7f7e02751210, args=<optimized out>, nargs=<optimized out>,
keywords=<optimized out>) at Objects/call.c:242
#101 0x00007f7e31975104 in _PyEval_EvalFrameDefault (tstate=<optimized out>, frame=<optimized out>, throwflag=<optimized out>) at Python/generated_cases.c.h:813
#102 0x00007f7e31a48b59 in PyEval_EvalCode (co=0x55eb88ac0e60, globals=<optimized out>, locals=0x7f7e31330480) at Python/ceval.c:604
#103 0x00007f7e31a8956c in run_eval_code_obj (tstate=tstate@entry=0x7f7e31d2fdf0 <_PyRuntime+283024>, co=co@entry=0x55eb88ac0e60, globals=globals@entry=0x7f7e31330480,
locals=locals@entry=0x7f7e31330480) at Python/pythonrun.c:1381
#104 0x00007f7e31a8618d in run_mod (mod=mod@entry=0x55eb88aea528, filename=filename@entry=0x7f7e313305b0, globals=globals@entry=0x7f7e31330480,
locals=locals@entry=0x7f7e31330480, flags=flags@entry=0x7ffda8ac0d08, arena=arena@entry=0x7f7e3171bd10, interactive_src=0x0, generate_new_source=0)
at Python/pythonrun.c:1489
#105 0x00007f7e31a828f8 in pyrun_file (fp=fp@entry=0x55eb88a379f0, filename=filename@entry=0x7f7e313305b0, start=start@entry=257, globals=globals@entry=0x7f7e31330480,
locals=locals@entry=0x7f7e31330480, closeit=closeit@entry=1, flags=0x7ffda8ac0d08) at Python/pythonrun.c:1295
#106 0x00007f7e31a82522 in _PyRun_SimpleFileObject (fp=fp@entry=0x55eb88a379f0, filename=filename@entry=0x7f7e313305b0, closeit=closeit@entry=1,
flags=flags@entry=0x7ffda8ac0d08) at Python/pythonrun.c:517
#107 0x00007f7e31a82323 in _PyRun_AnyFileObject (fp=fp@entry=0x55eb88a379f0, filename=filename@entry=0x7f7e313305b0, closeit=closeit@entry=1,
flags=flags@entry=0x7ffda8ac0d08) at Python/pythonrun.c:77
#108 0x00007f7e31a80991 in pymain_run_file_obj (program_name=0x7f7Source: qutebrowser/qutebrowser