Bug 378538 - Crash when loading a document with vector data
Summary: Crash when loading a document with vector data
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: General (show other bugs)
Version: git master (please specify the git hash!)
Platform: Other Linux
: NOR crash
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-04-07 13:20 UTC by Halla Rempt
Modified: 2017-05-01 08:59 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Halla Rempt 2017-04-07 13:20:55 UTC
To reproduce:

* load a kra image with a vector layer created in 3.x in git master
* save the image under another name with git master
* close the image
* load the new image

Backtrace:

(gdb) bt
#0  0x00007fffee037c8e in QObject::removeEventFilter(QObject*) () at /home/boud/dev/deps/lib/libQt5Core.so.5
#1  0x00007ffff7865721 in KisInputManager::setupAsEventFilter(QObject*) (this=0x6d12df8, receiver=0xa5c76c0) at /home/boud/dev/krita/libs/ui/input/kis_input_manager.cpp:150
#2  0x00007ffff786b1d7 in KisInputManager::Private::CanvasSwitcher::addCanvas(KisCanvas2*) (this=0x6b4db18, canvas=0xab4e818) at /home/boud/dev/krita/libs/ui/input/kis_input_manager_p.cpp:178
#3  0x00007ffff78656d0 in KisInputManager::addTrackedCanvas(KisCanvas2*) (this=<optimized out>, canvas=<optimized out>) at /home/boud/dev/krita/libs/ui/input/kis_input_manager.cpp:103
#4  0x00007ffff791f86f in KisViewManager::slotViewAdded(KisView*) (this=0x6d12950, view=<optimized out>) at /home/boud/dev/krita/libs/ui/KisViewManager.cpp:324
#5  0x00007ffff797ebf4 in KisViewManager::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>)
    at /home/boud/dev/build/libs/ui/kritaui_automoc.dir/moc_KisViewManager_XZDRS5QDZO4IUV.cpp:172
#6  0x00007fffee030441 in QMetaObject::activate(QObject*, int, int, void**) () at /home/boud/dev/deps/lib/libQt5Core.so.5
#7  0x00007ffff7970a42 in KisPart::sigViewAdded(KisView*) (this=this@entry=0x7ffff7dda050 <_ZZN12_GLOBAL__N_116Q_QGS_s_instance13innerFunctionEvE6holder>, _t1=_t1@entry=0xab4ec90)
    at /home/boud/dev/build/libs/ui/kritaui_automoc.dir/moc_KisPart_US6NGILVIMA7VI.cpp:291
#8  0x00007ffff790545e in KisPart::addView(KisView*) (this=this@entry=0x7ffff7dda050 <_ZZN12_GLOBAL__N_116Q_QGS_s_instance13innerFunctionEvE6holder>, view=view@entry=0xab4ec90) at /home/boud/dev/krita/libs/ui/KisPart.cpp:261
#9  0x00007ffff7907118 in KisPart::createView(KisDocument*, KoCanvasResourceManager*, KActionCollection*, QWidget*) (this=0x7ffff7dda050 <_ZZN12_GLOBAL__N_116Q_QGS_s_instance13innerFunctionEvE6holder>, document=document@entry=0xa2b1fd0, resourceManager=resourceManager@entry=0x6d12d90, actionCollection=actionCollection@entry=0x6d12930, parent=parent@entry=0x6b4d550) at /home/boud/dev/krita/libs/ui/KisPart.cpp:245
#10 0x00007ffff78ecd24 in KisMainWindow::addViewAndNotifyLoadingCompleted(KisDocument*) (this=0x6b4d550, document=0xa2b1fd0) at /home/boud/dev/krita/libs/ui/KisMainWindow.cpp:789
#11 0x00007ffff78ece30 in KisMainWindow::slotLoadCompleted() (this=0x6b4d550) at /home/boud/dev/krita/libs/ui/KisMainWindow.cpp:810
#12 0x00007ffff78fbdb7 in KisMainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x6b4d550, _c=<optimized out>, _id=<optimized out>, _a=0x7fffffffbb20)
    at /home/boud/dev/build/libs/ui/moc_KisMainWindow.cpp:325
#13 0x00007fffee030441 in QMetaObject::activate(QObject*, int, int, void**) () at /home/boud/dev/deps/lib/libQt5Core.so.5
#14 0x00007ffff78d2a78 in KisDocument::openUrlInternal(QUrl const&) (this=this@entry=0xa2b1fd0, url=...) at /home/boud/dev/krita/libs/ui/KisDocument.cpp:1471
#15 0x00007ffff78d2d30 in KisDocument::openUrl(QUrl const&, KisDocument::OpenUrlFlags) (this=this@entry=0xa2b1fd0, _url=..., flags=flags@entry=KisDocument::OPEN_URL_FLAG_NONE) at /home/boud/dev/krita/libs/ui/KisDocument.cpp:972
#16 0x00007ffff78ecff0 in KisMainWindow::openDocumentInternal(QUrl const&, KisDocument*) (this=this@entry=0x6b4d550, url=..., newdoc=0xa2b1fd0, newdoc@entry=0x0) at /home/boud/dev/krita/libs/ui/KisMainWindow.cpp:772
#17 0x00007ffff78f436d in KisMainWindow::openDocument(QUrl const&) (this=this@entry=0x6b4d550, url=...) at /home/boud/dev/krita/libs/ui/KisMainWindow.cpp:754
#18 0x00007ffff78f4571 in KisMainWindow::slotFileOpenRecent(QUrl const&) (this=0x6b4d550, url=...) at /home/boud/dev/krita/libs/ui/KisMainWindow.cpp:1347
#19 0x00007ffff78fbd0e in KisMainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x6b4d550, _c=<optimized out>, _id=<optimized out>, _a=0x7fffffffbfe0)
    at /home/boud/dev/build/libs/ui/moc_KisMainWindow.cpp:311
#20 0x00007fffee030441 in QMetaObject::activate(QObject*, int, int, void**) () at /home/boud/dev/deps/lib/libQt5Core.so.5
#21 0x00007ffff474fc32 in KRecentFilesAction::urlSelected(QUrl const&) (this=this@entry=0x7d41770, _t1=...) at /home/boud/dev/build/libs/widgetutils/moc_krecentfilesaction.cpp:204
#22 0x00007ffff4751042 in KRecentFilesActionPrivate::_k_urlSelected(QAction*) (this=<optimized out>, action=0xa2eedc0) at /home/boud/dev/krita/libs/widgetutils/config/krecentfilesaction.cpp:99
#23 0x00007ffff47511bb in KRecentFilesAction::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>)
    at /home/boud/dev/build/libs/widgetutils/moc_krecentfilesaction.cpp:93
#24 0x00007fffee030441 in QMetaObject::activate(QObject*, int, int, void**) () at /home/boud/dev/deps/lib/libQt5Core.so.5
#25 0x00007ffff2bee46f in KSelectAction::triggered(QAction*) (this=this@entry=0x7d41770, _t1=0xa2eedc0) at /home/boud/dev/b/ext_frameworks/ext_kwidgetsaddons-prefix/src/ext_kwidgetsaddons-build/src/moc_kselectaction.cpp:286
#26 0x00007ffff2bef61d in KSelectAction::actionTriggered(QAction*) (this=0x7d41770, action=0xa2eedc0) at /home/boud/dev/b/ext_frameworks/ext_kwidgetsaddons-prefix/src/ext_kwidgetsaddons/src/kselectaction.cpp:343
#27 0x00007fffee030a53 in QMetaObject::activate(QObject*, int, int, void**) () at /home/boud/dev/deps/lib/libQt5Core.so.5
#28 0x00007fffeeff13ff in QActionGroup::triggered(QAction*) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#29 0x00007fffeeff2279 in  () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#30 0x00007fffee030441 in QMetaObject::activate(QObject*, int, int, void**) () at /home/boud/dev/deps/lib/libQt5Core.so.5
#31 0x00007fffeefed842 in QAction::triggered(bool) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#32 0x00007fffeeff03dd in QAction::activate(QAction::ActionEvent) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#33 0x00007fffef16b342 in  () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#34 0x00007fffef1704f0 in  () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#35 0x00007fffef172bb1 in QMenu::keyPressEvent(QKeyEvent*) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#36 0x00007fffef03867a in QWidget::event(QEvent*) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#37 0x00007fffef17497b in QMenu::event(QEvent*) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#38 0x00007fffeeff6dec in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#39 0x00007fffeeffb380 in QApplication::notify(QObject*, QEvent*) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#40 0x00007ffff78c4837 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x7d37230, event=0x7fffffffce00) at /home/boud/dev/krita/libs/ui/KisApplication.cpp:550
#41 0x00007fffee0068e5 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /home/boud/dev/deps/lib/libQt5Core.so.5
#42 0x00007fffef053d6b in  () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#43 0x00007fffeeff6dec in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#44 0x00007fffeeffb44a in QApplication::notify(QObject*, QEvent*) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#45 0x00007ffff78c4837 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x7d46ec0, event=0x7fffffffce00) at /home/boud/dev/krita/libs/ui/KisApplication.cpp:550
#46 0x00007fffee0068e5 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /home/boud/dev/deps/lib/libQt5Core.so.5
#47 0x00007fffee5b6160 in QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent*) () at /home/boud/dev/deps/lib/libQt5Gui.so.5
#48 0x00007fffee5baad5 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () at /home/boud/dev/deps/lib/libQt5Gui.so.5
#49 0x00007fffee59cbbb in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /home/boud/dev/deps/lib/libQt5Gui.so.5
#50 0x00007fffe5cea860 in  () at /home/boud/dev/deps/plugins/platforms/../../lib/libQt5XcbQpa.so.5
#51 0x00007fffeae46c84 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#52 0x00007fffeae46ed8 in  () at /usr/lib64/libglib-2.0.so.0
#53 0x00007fffeae46f7c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#54 0x00007fffee056d5c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /home/boud/dev/deps/lib/libQt5Core.so.5
#55 0x00007fffee004a8b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /home/boud/dev/deps/lib/libQt5Core.so.5
#56 0x00007fffee00c7c6 in QCoreApplication::exec() () at /home/boud/dev/deps/lib/libQt5Core.so.5
#57 0x00000000004057cb in main(int, char**) (argc=2, argv=<optimized out>) at /home/boud/dev/krita/krita/main.cc:269
Comment 1 Dmitry Kazakov 2017-04-28 19:17:49 UTC
Most probably, the crash happens due to a hack in 619be10b :(
Comment 2 Dmitry Kazakov 2017-05-01 07:17:48 UTC
Git commit 3ce218ca6674deeaa0539fe7b96d19577dc99641 by Dmitry Kazakov.
Committed on 01/05/2017 at 07:13.
Pushed by dkazakov into branch 'master'.

Don't let the user close the document while saving is in progress

Ideally, we should postpone closing till the saving is finished,
but it is impossible to do right now, because doc->setModified()
is called outside the saving lock held. Later, when we refactor
the saving code and the modified state will be cleared under
the lock, we can easily use KisSignalCompressor to close the
document.

The crash itself happened because the hack in KisPart::removeView()
just skipped the deinitialization of the view and the input manager
was still connected to the canvas that was destroyed.

M  +6    -0    libs/ui/KisDocument.cpp
M  +7    -0    libs/ui/KisDocument.h
M  +0    -7    libs/ui/KisMainWindow.cpp
M  +1    -13   libs/ui/KisPart.cpp
M  +0    -2    libs/ui/KisPart.h
M  +7    -0    libs/ui/KisView.cpp

https://commits.kde.org/krita/3ce218ca6674deeaa0539fe7b96d19577dc99641
Comment 3 Dmitry Kazakov 2017-05-01 08:59:59 UTC
Git commit 89641bfc428c268ae3fe42a0f4dd350b111ebc72 by Dmitry Kazakov.
Committed on 01/05/2017 at 08:17.
Pushed by dkazakov into branch 'krita/3.1'.

Don't let the user close the document while saving is in progress

Ideally, we should postpone closing till the saving is finished,
but it is impossible to do right now, because doc->setModified()
is called outside the saving lock held. Later, when we refactor
the saving code and the modified state will be cleared under
the lock, we can easily use KisSignalCompressor to close the
document.

The crash itself happened because the hack in KisPart::removeView()
just skipped the deinitialization of the view and the input manager
was still connected to the canvas that was destroyed.

# Conflicts:
#	libs/ui/KisDocument.cpp

M  +6    -0    libs/ui/KisDocument.cpp
M  +7    -0    libs/ui/KisDocument.h
M  +0    -7    libs/ui/KisMainWindow.cpp
M  +1    -13   libs/ui/KisPart.cpp
M  +0    -2    libs/ui/KisPart.h
M  +7    -0    libs/ui/KisView.cpp

https://commits.kde.org/krita/89641bfc428c268ae3fe42a0f4dd350b111ebc72