Create a Quick Clipping Group from multiple layers, then undo it, then it will make it hardcrash with an error message. Reproducible: Always Steps to Reproduce: 1. Created a Quick Clipping group 2. Undo'd the Quick Clipping Group action 3. Crash Actual Results: "Krita has encountered an internal error: ASSERT (krita): "m_dummiesMap.contains(node)" in file C:\kritadev\krita\libs\ui\flake\kis_node_dummies_graph.cpp, line 187" Expected Results: That the Quick Clipping Group would disarm and revert the layers to how they were.
Hi Draise, Thanks for your report. I can reproduce the assert with 3.0 pre-alpha, though if I press ignore, krita seems to continue without problems...
Backtrace: Thread 1 (Thread 0x7fe0c2ff37c0 (LWP 20889)): [KCrash Handler] #6 0x00007fe0baa470a7 in raise () at /lib64/libc.so.6 #7 0x00007fe0baa48458 in abort () at /lib64/libc.so.6 #8 0x00007fe0bb6ed7ce in () at /usr/lib64/libQt5Core.so.5 #9 0x00007fe0bdbb9820 in kis_assert_common(char const*, char const*, int, bool) (assertion=assertion@entry=0x7fe0c2ac35e6 "m_dummiesMap.contains(node)", file=file@entry=0x7fe0c2ac35a8 "/home/boud/dev/krita/libs/ui/flake/kis_node_dummies_graph.cpp", line=line@entry=187, throwException=throwException@entry=false) at /home/boud/dev/krita/libs/global/kis_assert.cpp:79 #10 0x00007fe0bdbb9cf7 in kis_assert_recoverable(char const*, char const*, int) (assertion=assertion@entry=0x7fe0c2ac35e6 "m_dummiesMap.contains(node)", file=file@entry=0x7fe0c2ac35a8 "/home/boud/dev/krita/libs/ui/flake/kis_node_dummies_graph.cpp", line=line@entry=187) at /home/boud/dev/krita/libs/global/kis_assert.cpp:88 #11 0x00007fe0c26cae70 in KisNodeDummiesGraph::nodeToDummy(KisSharedPtr<KisNode>) (this=0x8bc0a50, node=...) at /home/boud/dev/krita/libs/ui/flake/kis_node_dummies_graph.cpp:187 #12 0x00007fe0c26cd50c in KisNodeShapesGraph::nodeToDummy(KisSharedPtr<KisNode>) (this=<optimized out>, node=...) at /home/boud/dev/krita/libs/ui/flake/kis_node_shapes_graph.cpp:81 #13 0x00007fe0c26ce154 in KisShapeController::dummyForNode(KisSharedPtr<KisNode>) const (this=<optimized out>, node=...) at /home/boud/dev/krita/libs/ui/flake/kis_shape_controller.cpp:128 #14 0x00007fe0c2757f57 in KisNodeModel::indexFromNode(KisSharedPtr<KisNode>) const (this=0x843a280, node=...) at /home/boud/dev/krita/libs/ui/kis_node_model.cpp:103 #15 0x00007fe0c275bfaf in KisNodeFilterProxyModel::indexFromNode(KisSharedPtr<KisNode>) const (this=0x843a110, node=...) at /home/boud/dev/krita/libs/ui/kis_node_filter_proxy_model.cpp:105 #16 0x00007fe09280fc78 in KisLayerBox::slotNodeManagerChangedSelection(QList<KisSharedPtr<KisNode> > const&) (this=0x840bfd0, nodes=...) at /home/boud/dev/krita/plugins/extensions/dockers/defaultdockers/kis_layer_box.cpp:803 #17 0x00007fe0928128c9 in KisLayerBox::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x840bfd0, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/build/plugins/extensions/dockers/defaultdockers/moc_kis_layer_box.cpp:229 #18 0x00007fe0bb90acc6 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib64/libQt5Core.so.5 #19 0x00007fe0c29f5b25 in KisNodeManager::sigUiNeedChangeSelectedNodes(QList<KisSharedPtr<KisNode> > const&) (this=this@entry=0x7eb2268, _t1=...) at /home/boud/dev/build/libs/ui/moc_kis_node_manager.cpp:430 #20 0x00007fe0c2745b41 in KisNodeManager::slotSetSelectedNodes(QList<KisSharedPtr<KisNode> > const&) (this=this@entry=0x7eb2268, nodes=...) at /home/boud/dev/krita/libs/ui/kis_node_manager.cpp:691 #21 0x00007fe0c2745bac in KisNodeManager::slotImageRequestNodeReselection(KisSharedPtr<KisNode>, QList<KisSharedPtr<KisNode> > const&) (this=this@entry=0x7eb2268, activeNode=..., selectedNodes=...) at /home/boud/dev/krita/libs/ui/kis_node_manager.cpp:684 #22 0x00007fe0c2a0258f in KisNodeManager::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x7eb2268, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/build/libs/ui/moc_kis_node_manager.cpp:325 #23 0x00007fe0bb90acc6 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib64/libQt5Core.so.5 #24 0x00007fe0c1cf489a in KisImage::sigRequestNodeReselection(KisSharedPtr<KisNode>, QList<KisSharedPtr<KisNode> > const&) (this=<optimized out>, _t1=..., _t2=...) at /home/boud/dev/build/libs/image/moc_kis_image.cpp:615 #25 0x00007fe0c1cf6b0c in KisImage::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=0x7ffda6c71ed0) at /home/boud/dev/build/libs/image/moc_kis_image.cpp:282 #26 0x00007fe0bb90acc6 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib64/libQt5Core.so.5 #27 0x00007fe0c1cf4cfa in KisImageSignalRouter::sigRequestNodeReselection(KisSharedPtr<KisNode>, QList<KisSharedPtr<KisNode> > const&) (this=this@entry=0x8bc5778, _t1=..., _t2=...) at /home/boud/dev/build/libs/image/moc_kis_image_signal_router.cpp:298 #28 0x00007fe0c1bcc24b in KisImageSignalRouter::slotNotification(KisImageSignalType) (this=this@entry=0x8bc5778, type=...) at /home/boud/dev/krita/libs/image/kis_image_signal_router.cpp:132 #29 0x00007fe0c1cf7ce5 in KisImageSignalRouter::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x8bc5778, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/build/libs/image/moc_kis_image_signal_router.cpp:142 #30 0x00007fe0bb90bac6 in QObject::event(QEvent*) () at /usr/lib64/libQt5Core.so.5 #31 0x00007fe0bc5bee7c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5 #32 0x00007fe0bc5c3cc8 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5 #33 0x00007fe0c2929e10 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x8bc5778, event=0x7fe06c0063a0) at /home/boud/dev/krita/libs/ui/KisApplication.cpp:514 #34 0x00007fe0bb8dae95 in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib64/libQt5Core.so.5 #35 0x00007fe0bb8dd057 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /usr/lib64/libQt5Core.so.5 #36 0x00007fe0bb9328f3 in () at /usr/lib64/libQt5Core.so.5 #37 0x00007fe0b61fcc84 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0 #38 0x00007fe0b61fced8 in () at /usr/lib64/libglib-2.0.so.0 #39 0x00007fe0b61fcf7c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0 #40 0x00007fe0bb931d6c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQt5Core.so.5 #41 0x00007fe0bb8d8d53 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQt5Core.so.5 #42 0x00007fe0bc7ade1d in QDialog::exec() () at /usr/lib64/libQt5Widgets.so.5 #43 0x00007fe0bc7cebed in () at /usr/lib64/libQt5Widgets.so.5 #44 0x00007fe0bdbb99e6 in kis_assert_common(char const*, char const*, int, bool) (assertion=assertion@entry=0x7fe0c2ac35e6 "m_dummiesMap.contains(node)", file=file@entry=0x7fe0c2ac35a8 "/home/boud/dev/krita/libs/ui/flake/kis_node_dummies_graph.cpp", line=line@entry=187, throwException=throwException@entry=false) at /home/boud/dev/krita/libs/global/kis_assert.cpp:75 #45 0x00007fe0bdbb9cf7 in kis_assert_recoverable(char const*, char const*, int) (assertion=assertion@entry=0x7fe0c2ac35e6 "m_dummiesMap.contains(node)", file=file@entry=0x7fe0c2ac35a8 "/home/boud/dev/krita/libs/ui/flake/kis_node_dummies_graph.cpp", line=line@entry=187) at /home/boud/dev/krita/libs/global/kis_assert.cpp:88 #46 0x00007fe0c26cae70 in KisNodeDummiesGraph::nodeToDummy(KisSharedPtr<KisNode>) (this=0x8bc0a50, node=...) at /home/boud/dev/krita/libs/ui/flake/kis_node_dummies_graph.cpp:187 #47 0x00007fe0c26cd50c in KisNodeShapesGraph::nodeToDummy(KisSharedPtr<KisNode>) (this=<optimized out>, node=...) at /home/boud/dev/krita/libs/ui/flake/kis_node_shapes_graph.cpp:81 #48 0x00007fe0c26ce154 in KisShapeController::dummyForNode(KisSharedPtr<KisNode>) const (this=<optimized out>, node=...) at /home/boud/dev/krita/libs/ui/flake/kis_shape_controller.cpp:128 #49 0x00007fe0c2757f57 in KisNodeModel::indexFromNode(KisSharedPtr<KisNode>) const (this=0x843a280, node=...) at /home/boud/dev/krita/libs/ui/kis_node_model.cpp:103 #50 0x00007fe0c275bfaf in KisNodeFilterProxyModel::indexFromNode(KisSharedPtr<KisNode>) const (this=0x843a110, node=...) at /home/boud/dev/krita/libs/ui/kis_node_filter_proxy_model.cpp:105 #51 0x00007fe09280fc78 in KisLayerBox::slotNodeManagerChangedSelection(QList<KisSharedPtr<KisNode> > const&) (this=0x840bfd0, nodes=...) at /home/boud/dev/krita/plugins/extensions/dockers/defaultdockers/kis_layer_box.cpp:803 #52 0x00007fe0928128c9 in KisLayerBox::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x840bfd0, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/build/plugins/extensions/dockers/defaultdockers/moc_kis_layer_box.cpp:229 #53 0x00007fe0bb90acc6 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib64/libQt5Core.so.5 #54 0x00007fe0c29f5b25 in KisNodeManager::sigUiNeedChangeSelectedNodes(QList<KisSharedPtr<KisNode> > const&) (this=this@entry=0x7eb2268, _t1=...) at /home/boud/dev/build/libs/ui/moc_kis_node_manager.cpp:430 #55 0x00007fe0c2745b41 in KisNodeManager::slotSetSelectedNodes(QList<KisSharedPtr<KisNode> > const&) (this=this@entry=0x7eb2268, nodes=...) at /home/boud/dev/krita/libs/ui/kis_node_manager.cpp:691 #56 0x00007fe0c2745bac in KisNodeManager::slotImageRequestNodeReselection(KisSharedPtr<KisNode>, QList<KisSharedPtr<KisNode> > const&) (this=this@entry=0x7eb2268, activeNode=..., selectedNodes=...) at /home/boud/dev/krita/libs/ui/kis_node_manager.cpp:684 #57 0x00007fe0c2a0258f in KisNodeManager::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x7eb2268, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/build/libs/ui/moc_kis_node_manager.cpp:325 #58 0x00007fe0bb90acc6 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib64/libQt5Core.so.5 #59 0x00007fe0c1cf489a in KisImage::sigRequestNodeReselection(KisSharedPtr<KisNode>, QList<KisSharedPtr<KisNode> > const&) (this=<optimized out>, _t1=..., _t2=...) at /home/boud/dev/build/libs/image/moc_kis_image.cpp:615 #60 0x00007fe0c1cf6b0c in KisImage::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=0x7ffda6c73130) at /home/boud/dev/build/libs/image/moc_kis_image.cpp:282 #61 0x00007fe0bb90acc6 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib64/libQt5Core.so.5 #62 0x00007fe0c1cf4cfa in KisImageSignalRouter::sigRequestNodeReselection(KisSharedPtr<KisNode>, QList<KisSharedPtr<KisNode> > const&) (this=this@entry=0x8bc5778, _t1=..., _t2=...) at /home/boud/dev/build/libs/image/moc_kis_image_signal_router.cpp:298 #63 0x00007fe0c1bcc24b in KisImageSignalRouter::slotNotification(KisImageSignalType) (this=this@entry=0x8bc5778, type=...) at /home/boud/dev/krita/libs/image/kis_image_signal_router.cpp:132 #64 0x00007fe0c1cf7ce5 in KisImageSignalRouter::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x8bc5778, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/build/libs/image/moc_kis_image_signal_router.cpp:142 #65 0x00007fe0bb90bac6 in QObject::event(QEvent*) () at /usr/lib64/libQt5Core.so.5 #66 0x00007fe0bc5bee7c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5 #67 0x00007fe0bc5c3cc8 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5 #68 0x00007fe0c2929e10 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x8bc5778, event=0x7fe06c005f10) at /home/boud/dev/krita/libs/ui/KisApplication.cpp:514 #69 0x00007fe0bb8dae95 in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib64/libQt5Core.so.5 #70 0x00007fe0bb8dd057 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /usr/lib64/libQt5Core.so.5 #71 0x00007fe0bb9328f3 in () at /usr/lib64/libQt5Core.so.5 #72 0x00007fe0b61fcc84 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0 #73 0x00007fe0b61fced8 in () at /usr/lib64/libglib-2.0.so.0 #74 0x00007fe0b61fcf7c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0 #75 0x00007fe0bb931d6c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQt5Core.so.5 #76 0x00007fe0bb8d8d53 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQt5Core.so.5 #77 0x00007fe0bb8e08f6 in QCoreApplication::exec() () at /usr/lib64/libQt5Core.so.5 #78 0x00000000004033a8 in main(int, char**) (argc=1, argv=0x7ffda6c73c68) at /home/boud/dev/krita/krita/main.cc:178
Git commit 526e1f92370608154d23d6bfcd48d32e308b808e by Boudewijn Rempt. Committed on 25/03/2016 at 13:17. Pushed by rempt into branch 'master'. This assert kicks off when undoing a quick clipping group to no good purpose: it doesn't prevent a real crash or any other bug, it just startles the user into reporting a bug. M +1 -1 libs/ui/flake/kis_node_dummies_graph.cpp http://commits.kde.org/krita/526e1f92370608154d23d6bfcd48d32e308b808e