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
Branch
master
Lint
No Linters Available
Unit
No Unit Test Coverage
Build Status
Buildable 17906
Build 17924: arc lint + arc unit
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.