Store stashed model index as QPersistentModelIndex
ClosedPublic

Authored by davidedmundson on Oct 19 2019, 3:55 PM.

Details

Summary

Otherwise we can crash if the model updates during load.

CCBUG: 390005
CCBUG: 385557

Test Plan

Had a state where my manually saved session would crash systemsettings on load
accessing a null kservice object from a menuItem

With this patch that session no longer crashes

Diff Detail

Repository
R124 System Settings
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.
davidedmundson created this revision.Oct 19 2019, 3:55 PM
Restricted Application added a project: Plasma. · View Herald TranscriptOct 19 2019, 3:55 PM
Restricted Application added a subscriber: plasma-devel. · View Herald Transcript
davidedmundson requested review of this revision.Oct 19 2019, 3:55 PM

Thread 1 (Thread 0x7f17b0836400 (LWP 5535)):
[KCrash Handler]
#6 KService::d_func (this=0x0) at /home/david/projects/kde5/src/frameworks/kservice/src/services/kservice.h:587
#7 0x00007f17b677e3c3 in KService::comment (this=0x0) at /home/david/projects/kde5/src/frameworks/kservice/src/services/kservice.cpp:934
#8 0x00007f17ac416ea4 in ToolTipManager::generateToolTipLine (this=0x557503ee57e0, item=0x7ffcf4215e60, toolTip=0x557509919f10, iconSize=..., comment=true) at /home/david/projects/kde5/src/kde/workspace/systemsettings/sidebar/ToolTips/tooltipmanager.cpp:203
#9 0x00007f17ac416992 in ToolTipManager::createTipContent (this=0x557503ee57e0, item=...) at /home/david/projects/kde5/src/kde/workspace/systemsettings/sidebar/ToolTips/tooltipmanager.cpp:167
#10 0x00007f17ac4165ef in ToolTipManager::showToolTip (this=0x557503ee57e0, menuItem=...) at /home/david/projects/kde5/src/kde/workspace/systemsettings/sidebar/ToolTips/tooltipmanager.cpp:145
#11 0x00007f17ac41627a in ToolTipManager::prepareToolTip (this=0x557503ee57e0) at /home/david/projects/kde5/src/kde/workspace/systemsettings/sidebar/ToolTips/tooltipmanager.cpp:135
#12 0x00007f17ac41871b in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (ToolTipManager::*)()>::call(void (ToolTipManager::*)(), ToolTipManager*, void) (f=(void (ToolTipManager::*)(ToolTipManager * const)) 0x7f17ac4161e0 <ToolTipManager::prepareToolTip()>, o=0x557503ee57e0, arg=0x7ffcf42161f0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#13 0x00007f17ac418683 in QtPrivate::FunctionPointer<void (ToolTipManager::*)()>::call<QtPrivate::List<>, void>(void (ToolTipManager::*)(), ToolTipManager*, void
) (f=(void (ToolTipManager::*)(ToolTipManager * const)) 0x7f17ac4161e0 <ToolTipManager::prepareToolTip()>, o=0x557503ee57e0, arg=0x7ffcf42161f0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#14 0x00007f17ac4185a6 in QtPrivate::QSlotObject<void (ToolTipManager::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void, bool*) (which=1, this_=0x557503ee5f70, r=0x557503ee57e0, a=0x7ffcf42161f0, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:414
#15 0x00007f17b545ab70 in QMetaObject::activate(QObject*, int, int, void
) () from /usr/lib/libQt5Core.so.5
#16 0x00007f17b5467b78 in QTimer::timeout(QTimer::QPrivateSignal) () from /usr/lib/libQt5Core.so.5
#17 0x00007f17b545b3e5 in QObject::event(QEvent*) () from /usr/lib/libQt5Core.so.5
#18 0x00007f17b5e824f5 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#19 0x00007f17b5e8be11 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#20 0x00007f17b542e9c2 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#21 0x00007f17b5485d9d in QTimerInfoList::activateTimers() () from /usr/lib/libQt5Core.so.5
#22 0x00007f17b5486632 in ?? () from /usr/lib/libQt5Core.so.5
#23 0x00007f17b2ee93fe in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#24 0x00007f17b2eeb211 in ?? () from /usr/lib/libglib-2.0.so.0
#25 0x00007f17b2eeb251 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#26 0x00007f17b5486a03 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#27 0x00007f17b542d4ec in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#28 0x00007f17b5435326 in QCoreApplication::exec() () from /usr/lib/libQt5Core.so.5
#29 0x0000557502234fe3 in main (argc=1, argv=0x7ffcf4216ad8) at /home/david/projects/kde5/src/kde/workspace/systemsettings/app/main.cpp:71
[Inferior 1 (process 5535) detached]

davidedmundson edited the summary of this revision. (Show Details)Oct 19 2019, 3:58 PM
apol accepted this revision.Oct 20 2019, 11:11 PM
apol added a subscriber: apol.

Makes a lot of sense.

This revision is now accepted and ready to land.Oct 20 2019, 11:11 PM
This revision was automatically updated to reflect the committed changes.