sublime: Fix crash when splitting views

Authored by kfunk on Jul 6 2017, 10:47 PM.

Description

sublime: Fix crash when splitting views

Crash likely introduced by a8bbae4b0072a92bdf9f5a6a91a6e200310e0efb

The problem was the double-deletion of the QMenu instance (first via
QObject child-parent relationship triggered by the deletion of the
parent of the QMenu instance after invoking an action in said QMenu,
second via cleanup at end of the current scope)

ASAN trace:

25944==ERROR: AddressSanitizer: attempting free on address which was not malloc()-ed: 0x7ffcf4d4ae80 in thread T0

#0 0x7f9061a85f5f in QVector<QExplicitlySharedDataPointer<KDevelop::StaticAssistant> >::~QVector() /usr/include/x86_64-linux-gnu/qt5/QtCore/qvector.h:75:37
#0 0x510e20 in operator delete(void*, unsigned long) (/home/kfunk/devel/install/kf5-stable/bin/kdevelop+0x510e20)
#1 0x7f0d17e4bcd0 in QObjectPrivate::deleteChildren() (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2a6cd0)
#2 0x7f0d18b3c3da in QWidget::~QWidget() (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x1963da)
#3 0x7f0d1e4a7684 in Sublime::ContainerTabBar::~ContainerTabBar() /home/kfunk/devel/src/kf5/kdevplatform-stable/sublime/container.cpp:50:7
#4 0x7f0d1e4a76a8 in Sublime::ContainerTabBar::~ContainerTabBar() /home/kfunk/devel/src/kf5/kdevplatform-stable/sublime/container.cpp:50:7
#5 0x7f0d17e4bcd0 in QObjectPrivate::deleteChildren() (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2a6cd0)
#6 0x7f0d18b3c3da in QWidget::~QWidget() (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x1963da)
#7 0x7f0d1e49b0e2 in Sublime::Container::~Container() /home/kfunk/devel/src/kf5/kdevplatform-stable/sublime/container.cpp:349:1
#8 0x7f0d1e49b128 in Sublime::Container::~Container() /home/kfunk/devel/src/kf5/kdevplatform-stable/sublime/container.cpp:347:1
#9 0x7f0d1e4fd95f in Sublime::MainWindowPrivate::viewAdded(Sublime::AreaIndex*, Sublime::View*) /home/kfunk/devel/src/kf5/kdevplatform-stable/sublime/mainwindow_p.cpp:552:21
#10 0x7f0d1e4ecb9f in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1>, QtPrivate::List<Sublime::AreaIndex*, Sublime::View*>, void, void (Sublime::MainWindowPrivate::*)(Sublime::AreaIndex*, Sublime::View*)>::call(void (Sublime::MainWindowPrivate::*)(Sublime::AreaIndex*, Sublime::View*), Sublime::MainWindowPrivate*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:141:13
#11 0x7f0d1e4ec810 in void QtPrivate::FunctionPointer<void (Sublime::MainWindowPrivate::*)(Sublime::AreaIndex*, Sublime::View*)>::call<QtPrivate::List<Sublime::AreaIndex*, Sublime::View*>, void>(void (Sublime::MainWindowPrivate::*)(Sublime::AreaIndex*, Sublime::View*), Sublime::MainWindowPrivate*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:160:13
#12 0x7f0d1e4ec426 in QtPrivate::QSlotObject<void (Sublime::MainWindowPrivate::*)(Sublime::AreaIndex*, Sublime::View*), QtPrivate::List<Sublime::AreaIndex*, Sublime::View*>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject_impl.h:120:17
#13 0x7f0d17e4d81d in QMetaObject::activate(QObject*, int, int, void**) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2a881d)
#14 0x7f0d1e552665 in Sublime::Area::viewAdded(Sublime::AreaIndex*, Sublime::View*) /home/kfunk/devel/build/kf5/kdevplatform-stable/sublime/KDevPlatformSublime_automoc.dir/moc_area_PMAGMMPI7SVUYA.cpp:276:5
#15 0x7f0d1e47571f in Sublime::Area::addView(Sublime::View*, Sublime::AreaIndex*, Qt::Orientation) /home/kfunk/devel/src/kf5/kdevplatform-stable/sublime/area.cpp:200:10
#16 0x7f0d1e475592 in Sublime::Area::addView(Sublime::View*, Sublime::View*, Qt::Orientation) /home/kfunk/devel/src/kf5/kdevplatform-stable/sublime/area.cpp:194:5
#17 0x7f0d1deed0b8 in KDevelop::MainWindowPrivate::split(Qt::Orientation) /home/kfunk/devel/src/kf5/kdevplatform-stable/shell/mainwindow_actions.cpp:139:27
#18 0x7f0d1dee6dc9 in KDevelop::MainWindowPrivate::splitHorizontal() /home/kfunk/devel/src/kf5/kdevplatform-stable/shell/mainwindow_actions.cpp:122:5
#19 0x7f0d1dee9cbd in KDevelop::MainWindowPrivate::contextMenuSplitHorizontal() /home/kfunk/devel/src/kf5/kdevplatform-stable/shell/mainwindow_actions.cpp:229:5
#20 0x7f0d1def5391 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (KDevelop::MainWindowPrivate::*)()>::call(void (KDevelop::MainWindowPrivate::*)(), KDevelop::MainWindowPrivate*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:141:13
#21 0x7f0d1def50e0 in void QtPrivate::FunctionPointer<void (KDevelop::MainWindowPrivate::*)()>::call<QtPrivate::List<>, void>(void (KDevelop::MainWindowPrivate::*)(), KDevelop::MainWindowPrivate*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:160:13
#22 0x7f0d1def4cf6 in QtPrivate::QSlotObject<void (KDevelop::MainWindowPrivate::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject_impl.h:120:17
#23 0x7f0d17e4d81d in QMetaObject::activate(QObject*, int, int, void**) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2a881d)
#24 0x7f0d18af2991 in QAction::triggered(bool) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x14c991)
#25 0x7f0d18af537f in QAction::activate(QAction::ActionEvent) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x14f37f)
#26 0x7f0d18c649b9  (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x2be9b9)
#27 0x7f0d18c6c043  (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x2c6043)
#28 0x7f0d18c6d015 in QMenu::mouseReleaseEvent(QMouseEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x2c7015)
#29 0x7f0d18b40a77 in QWidget::event(QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x19aa77)
#30 0x7f0d18c6f342 in QMenu::event(QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x2c9342)
#31 0x7f0d18af935b in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x15335b)
#32 0x7f0d18b019cc in QApplication::notify(QObject*, QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x15b9cc)
#33 0x7f0d17e2189f in QCoreApplication::notifyInternal2(QObject*, QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x27c89f)
#34 0x7f0d18b0007c in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x15a07c)
#35 0x7f0d18b5b505  (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x1b5505)
#36 0x7f0d18b5db02  (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x1b7b02)
#37 0x7f0d18af935b in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x15335b)
#38 0x7f0d18b00b10 in QApplication::notify(QObject*, QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x15ab10)
#39 0x7f0d17e2189f in QCoreApplication::notifyInternal2(QObject*, QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x27c89f)
#40 0x7f0d18365722 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0xf5722)
#41 0x7f0d183672a4 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0xf72a4)
#42 0x7f0d1834523a in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0xd523a)
#43 0x7f0cf8d0882f  (/usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5+0x7182f)
#44 0x7f0d0bf53376 in g_main_context_dispatch (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x4a376)
#45 0x7f0d0bf535df  (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x4a5df)
#46 0x7f0d0bf5368b in g_main_context_iteration (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x4a68b)
#47 0x7f0d17e75f0e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2d0f0e)
#48 0x7f0d17e1f889 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x27a889)
#49 0x7f0d18c69b0c in QMenu::exec(QPoint const&, QAction*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x2c3b0c)
#50 0x7f0d1e499d27 in Sublime::Container::contextMenu(QPoint const&) /home/kfunk/devel/src/kf5/kdevplatform-stable/sublime/container.cpp:613:31

Details

Committed
kfunkJul 6 2017, 10:50 PM
Parents
R33:6e9ea43f492d: macOS: Properly set QWidget::windowFilePath
Branches
Unknown
Tags
Unknown