Skip to content

Attempt to fix a crash in QWebView::loadFinished() on shutdown

Thomas Schöps requested to merge thomassc/kdevelop:fix_shutdown_crash into master

I think this fixes a crash on program shutdown with the backtrace below (in QWebView::loadFinished()). The proposed fix disconnects signals on destruction such that loadFinished() cannot be called anymore then.

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7f7e1ce in QWebView::url() const () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
(gdb) bt
0  0x00007ffff7f7e1ce in QWebView::url() const () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
1  0x00007ffff27da213 in operator() (__closure=0x2ac8140) at /home/thomas/kde/src/kdevelop/kdevplatform/documentation/standarddocumentationview.cpp:181
2  call (arg=<optimized out>, f=...) at /home/thomas/Qt/5.12.0/gcc_64/include/QtCore/qobjectdefs_impl.h:146
3  call<QtPrivate::List<bool>, void> (arg=<optimized out>, f=...) at /home/thomas/Qt/5.12.0/gcc_64/include/QtCore/qobjectdefs_impl.h:256
4  QtPrivate::QFunctorSlotObject<KDevelop::StandardDocumentationView::StandardDocumentationView(KDevelop::DocumentationFindWidget*, QWidget*)::<lambda(bool)>, 1, QtPrivate::List<bool>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=1, this_=0x2ac8130, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /home/thomas/Qt/5.12.0/gcc_64/include/QtCore/qobjectdefs_impl.h:439
5  0x00007ffff4d3e956 in QMetaObject::activate(QObject*, int, int, void**) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
6  0x00007ffff7f7fdd6 in QWebView::loadFinished(bool) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
7  0x00007ffff7f7f393 in QWebView::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
8  0x00007ffff4d3e629 in QMetaObject::activate(QObject*, int, int, void**) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
9  0x00007ffff7f788f4 in QWebPage::loadFinished(bool) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
10 0x00007ffff7f6b76d in QWebFramePrivate::emitLoadFinished(bool, bool) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
11 0x00007fffe30d6917 in WebCore::FrameLoaderClientQt::emitLoadFinished(bool) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
12 0x00007fffe30d47b1 in WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad(WebCore::ResourceError const&) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
13 0x00007fffe4825e1b in WebCore::FrameLoader::checkLoadCompleteForThisFrame() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
14 0x00007fffe482700b in WebCore::FrameLoader::checkLoadComplete() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
15 0x00007fffe48286d0 in WebCore::FrameLoader::receivedMainResourceError(WebCore::ResourceError const&) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
16 0x00007fffe4800242 in WebCore::DocumentLoader::mainReceivedError(WebCore::ResourceError const&) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
17 0x00007fffe4800845 in WebCore::DocumentLoader::notifyFinished(WebCore::CachedResource*) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
18 0x00007fffe487fbbd in WebCore::CachedResource::checkNotify() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
19 0x00007fffe487fdce in WebCore::CachedResource::cancelLoad() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
20 0x00007fffe485da87 in WebCore::SubresourceLoader::didCancel(WebCore::ResourceError const&) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
21 0x00007fffe4858a55 in WebCore::ResourceLoader::cancel(WebCore::ResourceError const&) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
22 0x00007fffe4805f9d in WebCore::DocumentLoader::cancelMainResourceLoad(WebCore::ResourceError const&) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
23 0x00007fffe48004b6 in WebCore::DocumentLoader::stopLoading() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
24 0x00007fffe4823843 in WebCore::FrameLoader::stopAllLoaders(WebCore::ClearProvisionalItemPolicy) () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
25 0x00007fffe4827254 in WebCore::FrameLoader::detachFromParent() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
26 0x00007fffe30fc844 in QWebPageAdapter::deletePage() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKit.so.5
27 0x00007ffff7f7d256 in QWebPagePrivate::~QWebPagePrivate() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
28 0x00007ffff7f7d308 in QWebPagePrivate::~QWebPagePrivate() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
29 0x00007ffff7f71eee in QWebPage::~QWebPage() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
30 0x00007ffff7f71f16 in QWebPage::~QWebPage() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
31 0x00007ffff7f7dc13 in QWebViewPrivate::detachCurrentPage() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
32 0x00007ffff7f7d7d8 in QWebViewPrivate::~QWebViewPrivate() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
33 0x00007ffff7f7d7f4 in QWebViewPrivate::~QWebViewPrivate() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
34 0x00007ffff7f7da52 in QWebView::~QWebView() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
35 0x00007ffff7f7da80 in QWebView::~QWebView() () from /usr/local/lib/x86_64-linux-gnu/libQt5WebKitWidgets.so.5
36 0x00007ffff4d3c243 in QObjectPrivate::deleteChildren() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
37 0x00007ffff6610d58 in QWidget::~QWidget() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Widgets.so.5
38 0x00007ffff27dae59 in KDevelop::StandardDocumentationView::~StandardDocumentationView (this=0x2e9d530, __in_chrg=<optimized out>) at /home/thomas/kde/src/kdevelop/kdevplatform/documentation/standarddocumentationview.h:39
39 0x00007ffff4d3c243 in QObjectPrivate::deleteChildren() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
40 0x00007ffff6610d58 in QWidget::~QWidget() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Widgets.so.5
41 0x00007fffbb1181fe in PhpDocumentationWidget::~PhpDocumentationWidget() () from /home/thomas/kde/usr/lib/x86_64-linux-gnu/plugins/kdevplatform/32/kdevphpdocs.so
42 0x00007fffbb118220 in PhpDocumentationWidget::~PhpDocumentationWidget() () from /home/thomas/kde/usr/lib/x86_64-linux-gnu/plugins/kdevplatform/32/kdevphpdocs.so
43 0x00007ffff4d3c243 in QObjectPrivate::deleteChildren() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
44 0x00007ffff6610d58 in QWidget::~QWidget() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Widgets.so.5
45 0x00007ffff27e104e in ~DocumentationView (this=0x1e3ef60, __in_chrg=<optimized out>) at /home/thomas/kde/build/kdevelop/kdevplatform/documentation/KDevPlatformDocumentation_autogen/EWIEGA46WW/../../../../../../src/kdevelop/kdevplatform/documentation/documentationview.h:38
46 DocumentationView::~DocumentationView (this=0x1e3ef60, __in_chrg=<optimized out>) at /home/thomas/kde/build/kdevelop/kdevplatform/documentation/KDevPlatformDocumentation_autogen/EWIEGA46WW/../../../../../../src/kdevelop/kdevplatform/documentation/documentationview.h:38
47 0x00007ffff4d3c243 in QObjectPrivate::deleteChildren() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
48 0x00007ffff6610d58 in QWidget::~QWidget() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Widgets.so.5
49 0x00007ffff6715459 in QMainWindow::~QMainWindow() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Widgets.so.5
50 0x00007ffff4d3c243 in QObjectPrivate::deleteChildren() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
51 0x00007ffff6610d58 in QWidget::~QWidget() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Widgets.so.5
52 0x00007ffff16f4281 in ~IdealDockWidget (this=0x1f01b90, __in_chrg=<optimized out>) at /home/thomas/kde/src/kdevelop/kdevplatform/sublime/idealdockwidget.cpp:66
53 Sublime::IdealDockWidget::~IdealDockWidget (this=0x1f01b90, __in_chrg=<optimized out>) at /home/thomas/kde/src/kdevelop/kdevplatform/sublime/idealdockwidget.cpp:68
54 0x00007ffff4d3c243 in QObjectPrivate::deleteChildren() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
55 0x00007ffff6610d58 in QWidget::~QWidget() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Widgets.so.5
56 0x00007ffff0bd2c85 in KMainWindow::~KMainWindow() () from /home/thomas/kde/usr/lib/x86_64-linux-gnu/libKF5XmlGui.so.5
57 0x00007ffff0c16730 in KXmlGuiWindow::~KXmlGuiWindow() () from /home/thomas/kde/usr/lib/x86_64-linux-gnu/libKF5XmlGui.so.5
58 0x00007ffff0eb3620 in KParts::MainWindow::~MainWindow() () from /home/thomas/kde/usr/lib/x86_64-linux-gnu/libKF5Parts.so.5
59 0x00007ffff16db435 in Sublime::MainWindow::~MainWindow (this=0x6dcd90, __vtt_parm=0x7ffff7dce6a8 <VTT for KDevelop::MainWindow+8>, __in_chrg=<optimized out>) at /home/thomas/kde/src/kdevelop/kdevplatform/sublime/mainwindow.cpp:71
60 0x00007ffff7a889cb in KDevelop::MainWindow::~MainWindow (this=this@entry=0x6dcd90, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at /home/thomas/kde/src/kdevelop/kdevplatform/shell/mainwindow.cpp:153
61 0x00007ffff7a88a49 in KDevelop::MainWindow::~MainWindow (this=0x6dcd90, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at /home/thomas/kde/src/kdevelop/kdevplatform/shell/mainwindow.cpp:161
62 0x00007ffff4d3f5b8 in QObject::event(QEvent*) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
63 0x00007ffff6615af3 in QWidget::event(QEvent*) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Widgets.so.5
64 0x00007ffff6716e21 in QMainWindow::event(QEvent*) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Widgets.so.5
65 0x00007ffff0bd4e21 in KMainWindow::event(QEvent*) () from /home/thomas/kde/usr/lib/x86_64-linux-gnu/libKF5XmlGui.so.5
66 0x00007ffff0c168c6 in KXmlGuiWindow::event(QEvent*) () from /home/thomas/kde/usr/lib/x86_64-linux-gnu/libKF5XmlGui.so.5
67 0x00007ffff65d785c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Widgets.so.5
68 0x00007ffff65de9f0 in QApplication::notify(QObject*, QEvent*) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Widgets.so.5
69 0x00007ffff4d12c18 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
70 0x00007ffff4d15647 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
71 0x00007ffff4d6a793 in postEventSourceDispatch(_GSource*, int (*)(void*), void*) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
72 0x00007fffe9dcce14 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
73 0x00007fffe9dcd058 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
74 0x00007fffe9dcd0fc in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
75 0x00007ffff4d69dcf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
76 0x00007ffff4d1157a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
77 0x00007ffff4d19f80 in QCoreApplication::exec() () from /home/thomas/Qt/5.12.0/gcc_64/lib/libQt5Core.so.5
78 0x000000000040c4eb in main (argc=<optimized out>, argv=<optimized out>) at /home/thomas/kde/src/kdevelop/app/main.cpp:846
Edited by Thomas Schöps

Merge request reports