Bug 372184 - Crash on closing a certain image
Summary: Crash on closing a certain image
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: Layer Stack (show other bugs)
Version: 3.0.1
Platform: Other Linux
: NOR crash
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-11-07 14:44 UTC by Halla Rempt
Modified: 2016-11-09 11:00 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Halla Rempt 2016-11-07 14:44:41 UTC
This file: https://github.com/io7m/v-workbot/blob/master/workbot.kra

contains something that causes a big, infinite stack recursion. Here's a portion of the backtrace: 

#191886 0x00007ffff6438f8c in KisLayerUtils::recursiveApplyNodes(KisSharedPtr<KisNode>, std::function<void (KisSharedPtr<KisNode>)>) (__args#0=..., this=0x7fffffffb410) at /usr/include/c++/4.8/functional:2471
#191887 0x00007ffff6438f8c in KisLayerUtils::recursiveApplyNodes(KisSharedPtr<KisNode>, std::function<void (KisSharedPtr<KisNode>)>) (node=..., func=...) at /home/boud/dev/3.1/libs/image/kis_layer_utils.cpp:1241
#191888 0x00007ffff6430dbc in KisLayer::setImage(KisWeakSharedPtr<KisImage>) (this=this@entry=0xbd3f750, image=...) at /home/boud/dev/3.1/libs/image/kis_layer.cc:326
#191889 0x00007ffff767a5f4 in KisShapeLayer::~KisShapeLayer() (this=0xbd3f750, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/ui/flake/kis_shape_layer.cc:219
#191890 0x00007ffff767a799 in KisShapeLayer::~KisShapeLayer() (this=0xbd3f750, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/ui/flake/kis_shape_layer.cc:229
#191891 0x00007ffff6449c56 in KisMask::setImage(KisWeakSharedPtr<KisImage>) (sp=<optimized out>, t=<optimized out>) at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:214
#191892 0x00007ffff6449c56 in KisMask::setImage(KisWeakSharedPtr<KisImage>) (this=0x7fffffffb4e0)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:221
#191893 0x00007ffff6449c56 in KisMask::setImage(KisWeakSharedPtr<KisImage>) (this=0x7fffffffb4e0, __in_chrg=<optimized out>) at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:109
#191894 0x00007ffff6449c56 in KisMask::setImage(KisWeakSharedPtr<KisImage>) (this=0xbd3fb40, image=...)
    at /home/boud/dev/3.1/libs/image/kis_mask.cc:101
#191895 0x00007ffff6430b82 in std::_Function_handler<void(KisSharedPtr<KisNode>), KisLayer::setImage(KisImageWSP)::__lambda0>::_M_invoke(const std::_Any_data &, KisSharedPtr<KisNode>) (node=..., __closure=<optimized out>)
    at /home/boud/dev/3.1/libs/image/kis_layer.cc:325
#191896 0x00007ffff6430b82 in std::_Function_handler<void(KisSharedPtr<KisNode>), KisLayer::setImage(KisImageWSP)::__lambda0>::_M_invoke(const std::_Any_data &, KisSharedPtr<KisNode>) (__functor=..., __args#0=...)
    at /usr/include/c++/4.8/functional:2071
#191897 0x00007ffff6438f8c in KisLayerUtils::recursiveApplyNodes(KisSharedPtr<KisNode>, std::function<void (KisSharedPtr<KisNode>)>) (__args#0=..., this=0x7fffffffb5f0) at /usr/include/c++/4.8/functional:2471
#191898 0x00007ffff6438f8c in KisLayerUtils::recursiveApplyNodes(KisSharedPtr<KisNode>, std::function<void (KisSharedPtr<KisNode>)>) (node=..., func=...) at /home/boud/dev/3.1/libs/image/kis_layer_utils.cpp:1241
#191899 0x00007ffff6430dbc in KisLayer::setImage(KisWeakSharedPtr<KisImage>) (this=this@entry=0xbd3f750, image=...) at /home/boud/dev/3.1/libs/image/kis_layer.cc:326
#191900 0x00007ffff767a5f4 in KisShapeLayer::~KisShapeLayer() (this=0xbd3f750, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/ui/flake/kis_shape_layer.cc:219
#191901 0x00007ffff767a799 in KisShapeLayer::~KisShapeLayer() (this=0xbd3f750, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/ui/flake/kis_shape_layer.cc:229
#191902 0x00007ffff6449c56 in KisMask::setImage(KisWeakSharedPtr<KisImage>) (sp=<optimized out>, t=<optimized out>) at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:214
#191903 0x00007ffff6449c56 in KisMask::setImage(KisWeakSharedPtr<KisImage>) (this=0x7fffffffb6c0)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:221
#191904 0x00007ffff6449c56 in KisMask::setImage(KisWeakSharedPtr<KisImage>) (this=0x7fffffffb6c0, __in_chrg=<optimized out>) at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:109
#191905 0x00007ffff6449c56 in KisMask::setImage(KisWeakSharedPtr<KisImage>) (this=0xbd3fb40, image=...)
    at /home/boud/dev/3.1/libs/image/kis_mask.cc:101
#191906 0x00007ffff6430b82 in std::_Function_handler<void(KisSharedPtr<KisNode>), KisLayer::setImage(KisImageWSP)::__lambda0>::_M_invoke(const std::_Any_data &, KisSharedPtr<KisNode>) (node=..., __closure=<optimized out>)
    at /home/boud/dev/3.1/libs/image/kis_layer.cc:325
#191907 0x00007ffff6430b82 in std::_Function_handler<void(KisSharedPtr<KisNode>), KisLayer::setImage(KisImageWSP)::__lambda0>::_M_invoke(const std::_Any_data &, KisSharedPtr<KisNode>) (__functor=..., __args#0=...)
    at /usr/include/c++/4.8/functional:2071
#191908 0x00007ffff6438f8c in KisLayerUtils::recursiveApplyNodes(KisSharedPtr<KisNode>, std::function<void (KisSharedPtr<KisNode>)>) (__args#0=..., this=0x7fffffffb7d0) at /usr/include/c++/4.8/functional:2471
#191909 0x00007ffff6438f8c in KisLayerUtils::recursiveApplyNodes(KisSharedPtr<KisNode>, std::function<void (KisSharedPtr<KisNode>)>) (node=..., func=...) at /home/boud/dev/3.1/libs/image/kis_layer_utils.cpp:1241
#191910 0x00007ffff6430dbc in KisLayer::setImage(KisWeakSharedPtr<KisImage>) (this=this@entry=0xbd3f750, image=...) at /home/boud/dev/3.1/libs/image/kis_layer.cc:326
#191911 0x00007ffff767a5f4 in KisShapeLayer::~KisShapeLayer() (this=0xbd3f750, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/ui/flake/kis_shape_layer.cc:219
#191912 0x00007ffff767a799 in KisShapeLayer::~KisShapeLayer() (this=0xbd3f750, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/ui/flake/kis_shape_layer.cc:229
#191913 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (sp=<optimized out>, t=<optimized out>)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:214
#191914 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (this=0xbd4f720)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:221
#191915 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (this=0xbd4f720, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:109
#191916 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (this=<optimized out>, to=0xb229fe8, from=0xb229fa0) at /home/boud/dev/deps/include/QtCore/qlist.h:484
#191917 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (this=<optimized out>, data=0xb229f90)
    at /home/boud/dev/deps/include/QtCore/qlist.h:855
#191918 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (this=<optimized out>, __in_chrg=<optimized out>) at /home/boud/dev/deps/include/QtCore/qlist.h:817
#191919 0x00007ffff645c132 in KisNode::~KisNode() (other=<unknown type in /home/boud/dev/i-3.1/lib64/libkritaimage.so.15, CU 0x27aa279, DIE 0x27e905d>, this=<optimized out>) at /home/boud/dev/deps/include/QtCore/qlist.h:149
#191920 0x00007ffff645c132 in KisNode::~KisNode() (this=<optimized out>)
    at /home/boud/dev/deps/include/QtCore/qlist.h:864
#191921 0x00007ffff645c132 in KisNode::~KisNode() (this=0xb430f00, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/image/kis_node.cpp:221
#191922 0x00007ffff6411e79 in KisGroupLayer::~KisGroupLayer() (this=0xb430f00, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/image/kis_group_layer.cc:80
#191923 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (sp=<optimized out>, t=<optimized out>)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:214
#191924 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (this=0xb332870)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:221
#191925 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (this=0xb332870, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:109
#191926 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (this=<optimized out>, to=0xb332f10, from=0xb332f00) at /home/boud/dev/deps/include/QtCore/qlist.h:484
#191927 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (this=<optimized out>, data=0xb332ef0)
    at /home/boud/dev/deps/include/QtCore/qlist.h:855
#191928 0x00007ffff63b6799 in QList<KisSharedPtr<KisNode> >::~QList() (this=<optimized out>, __in_chrg=<optimized out>) at /home/boud/dev/deps/include/QtCore/qlist.h:817
#191929 0x00007ffff645c132 in KisNode::~KisNode() (other=<unknown type in /home/boud/dev/i-3.1/lib64/libkritaimage.so.15, CU 0x27aa279, DIE 0x27e905d>, this=<optimized out>) at /home/boud/dev/deps/include/QtCore/qlist.h:149
#191930 0x00007ffff645c132 in KisNode::~KisNode() (this=<optimized out>)
    at /home/boud/dev/deps/include/QtCore/qlist.h:864
#191931 0x00007ffff645c132 in KisNode::~KisNode() (this=0xb19bda0, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/image/kis_node.cpp:221
#191932 0x00007ffff6411e79 in KisGroupLayer::~KisGroupLayer() (this=0xb19bda0, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/image/kis_group_layer.cc:80
#191933 0x00007ffff6419546 in KisSharedPtr<KisGroupLayer>::deref(KisSharedPtr<KisGroupLayer> const*, KisGroupLayer*) (t=<optimized out>, sp=<optimized out>) at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:214
#191934 0x00007ffff6420543 in KisImage::~KisImage() (p=0x0, this=0xc2f5278)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:498
#191935 0x00007ffff6420543 in KisImage::~KisImage() (p=0x0, this=0xc2f5278)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:130
#191936 0x00007ffff6420543 in KisImage::~KisImage() (this=0xb551040, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/image/kis_image.cc:266
#191937 0x00007ffff6420729 in KisImage::~KisImage() (this=0xb551040, __in_chrg=<optimized out>)
    at /home/boud/dev/3.1/libs/image/kis_image.cc:271
#191938 0x00007ffff78d0f77 in KisDocument::prepareLocksForSaving() (sp=<optimized out>, t=<optimized out>)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:214
#191939 0x00007ffff78d0f77 in KisDocument::prepareLocksForSaving() (p=<optimized out>, this=<optimized out>)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:498
#191940 0x00007ffff78d0f77 in KisDocument::prepareLocksForSaving() (p=<optimized out>, this=<optimized out>)
    at /home/boud/dev/3.1/libs/global/kis_shared_ptr.h:130
#191941 0x00007ffff78d0f77 in KisDocument::prepareLocksForSaving() (this=this@entry=0xa116fd0)
    at /home/boud/dev/3.1/libs/ui/KisDocument.cpp:948
#191942 0x00007ffff78d5f19 in KisDocument::saveNativeFormat(QString const&) (this=this@entry=0xa116fd0, file=...)
    at /home/boud/dev/3.1/libs/ui/KisDocument.cpp:973
#191943 0x00007ffff78d6c2b in KisDocument::saveFile(KisPinnedSharedPtr<KisPropertiesConfiguration>) (this=0xa116fd0, exportConfiguration=...) at /home/boud/dev/3.1/libs/ui/KisDocument.cpp:716
#191944 0x00007ffff78d7584 in KisDocument::save(KisPinnedSharedPtr<KisPropertiesConfiguration>) (this=this@entry=0xa116fd0, exportConfiguration=...) at /home/boud/dev/3.1/libs/ui/KisDocument.cpp:2243
#191945 0x00007ffff78d78a0 in KisDocument::saveAs(QUrl const&, KisPinnedSharedPtr<KisPropertiesConfiguration>) (this=this@entry=0xa116fd0, kurl=..., exportConfiguration=...) at /home/boud/dev/3.1/libs/ui/KisDocument.cpp:2219
#191946 0x00007ffff78fce58 in KisMainWindow::saveDocument(KisDocument*, bool, bool, int) (this=this@entry=
    0x91444e0, document=0xa116fd0, saveas=<optimized out>, 
    saveas@entry=true, silent=silent@entry=false, specialOutputFlag=specialOutputFlag@entry=0)
    at /home/boud/dev/3.1/libs/ui/KisMainWindow.cpp:1056
#191947 0x00007ffff78fd7f6 in KisMainWindow::slotFileSaveAs() (this=0x91444e0)
    at /home/boud/dev/3.1/libs/ui/KisMainWindow.cpp:1403
#191948 0x00007ffff790257a in KisMainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x91444e0, _c=<optimized out>, _id=<optimized out>, _a=0x7fffffffc620)
    at /home/boud/dev/b-3.1/libs/ui/moc_KisMainWindow.cpp:339
#191949 0x00007fffee2a4441 in QMetaObject::activate(QObject*, int, int, void**) ()
    at /home/boud/dev/deps/lib/libQt5Core.so.5
#191950 0x00007fffef261842 in QAction::triggered(bool) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191951 0x00007fffef2643dd in QAction::activate(QAction::ActionEvent) ()
    at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191952 0x00007fffef3df342 in  () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191953 0x00007fffef3e44f0 in  () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191954 0x00007fffef3e6bb1 in QMenu::keyPressEvent(QKeyEvent*) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191955 0x00007fffef2ac67a in QWidget::event(QEvent*) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191956 0x00007fffef3e897b in QMenu::event(QEvent*) () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191957 0x00007fffef26adec in QApplicationPrivate::notify_helper(QObject*, QEvent*) ()
    at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191958 0x00007fffef26f380 in QApplication::notify(QObject*, QEvent*) ()
    at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191959 0x00007ffff78c74f7 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x9dd08d0, event=0x7fffffffcee0) at /home/boud/dev/3.1/libs/ui/KisApplication.cpp:519
#191960 0x00007fffee27a8e5 in QCoreApplication::notifyInternal2(QObject*, QEvent*) ()
    at /home/boud/dev/deps/lib/libQt5Core.so.5
#191961 0x00007fffef2c7d6b in  () at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191962 0x00007fffef26adec in QApplicationPrivate::notify_helper(QObject*, QEvent*) ()
    at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191963 0x00007fffef26f44a in QApplication::notify(QObject*, QEvent*) ()
    at /home/boud/dev/deps/lib/libQt5Widgets.so.5
#191964 0x00007ffff78c74f7 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x9d504c0, event=0x7fffffffcee0) at /home/boud/dev/3.1/libs/ui/KisApplication.cpp:519
#191965 0x00007fffee27a8e5 in QCoreApplication::notifyInternal2(QObject*, QEvent*) ()
    at /home/boud/dev/deps/lib/libQt5Core.so.5
#191966 0x00007fffee82a160 in QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent*) () at /home/boud/dev/deps/lib/libQt5Gui.so.5
#191967 0x00007fffee82ead5 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () at /home/boud/dev/deps/lib/libQt5Gui.so.5
#191968 0x00007fffee810bbb in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /home/boud/dev/deps/lib/libQt5Gui.so.5
#191969 0x00007fffe6001860 in  () at /home/boud/dev/deps/plugins/platforms/../../lib/libQt5XcbQpa.so.5
#191970 0x00007fffeb0bbc84 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#191971 0x00007fffeb0bbed8 in  () at /usr/lib64/libglib-2.0.so.0
#191972 0x00007fffeb0bbf7c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#191973 0x00007fffee2cad5c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
    at /home/boud/dev/deps/lib/libQt5Core.so.5
#191974 0x00007fffee278a8b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) ()
    at /home/boud/dev/deps/lib/libQt5Core.so.5
#191975 0x00007fffee2807c6 in QCoreApplication::exec() () at /home/boud/dev/deps/lib/libQt5Core.so.5
#191976 0x000000000040541c in main(int, char*
Comment 1 Halla Rempt 2016-11-07 15:37:17 UTC
Note: this already happened in 3.0
Comment 2 Dmitry Kazakov 2016-11-09 10:39:55 UTC
Git commit 53ea42754134e9c051a30987f850eec99fe99ec0 by Dmitry Kazakov.
Committed on 09/11/2016 at 08:20.
Pushed by dkazakov into branch 'krita/3.1'.

Fix crash when closing images with shape layer + mask

We shouldn't call any node's method that accesses parent() or
next/prevSibling() in ctor and dtor. It is just unsafe.

M  +4    -6    libs/ui/flake/kis_shape_layer.cc
M  +7    -1    libs/ui/flake/kis_shape_layer_canvas.cpp
M  +2    -0    libs/ui/flake/kis_shape_layer_canvas.h
M  +11   -0    libs/ui/tests/kis_kra_saver_test.cpp
M  +2    -0    libs/ui/tests/kis_kra_saver_test.h
M  +9    -1    libs/ui/tests/util.h

http://commits.kde.org/krita/53ea42754134e9c051a30987f850eec99fe99ec0
Comment 3 Dmitry Kazakov 2016-11-09 11:00:04 UTC
Git commit c7c3310f910ddcc6d1af1fe2273232d1b3f1da80 by Dmitry Kazakov.
Committed on 09/11/2016 at 10:41.
Pushed by dkazakov into branch 'rempt/impex-refactoring'.

Fix crash when closing images with shape layer + mask

We shouldn't call any node's method that accesses parent() or
next/prevSibling() in ctor and dtor. It is just unsafe.

# Conflicts:
#	libs/ui/flake/kis_shape_layer.cc

M  +2    -3    libs/ui/flake/kis_shape_layer.cc
M  +7    -1    libs/ui/flake/kis_shape_layer_canvas.cpp
M  +2    -0    libs/ui/flake/kis_shape_layer_canvas.h
M  +9    -1    libs/ui/tests/util.h
M  +11   -0    plugins/impex/libkra/tests/kis_kra_saver_test.cpp
M  +2    -0    plugins/impex/libkra/tests/kis_kra_saver_test.h

http://commits.kde.org/krita/c7c3310f910ddcc6d1af1fe2273232d1b3f1da80