Summary: | Crash using the transform tool with a mask. | ||
---|---|---|---|
Product: | [Applications] krita | Reporter: | wolthera <griffinvalley> |
Component: | Tile manager | Assignee: | Krita Bugs <krita-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | antti.savo, halla |
Priority: | NOR | Keywords: | drkonqi |
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Ubuntu | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: |
Description
wolthera
2018-05-22 14:58:15 UTC
I think I found a reliable way to reproduce this crash Steps: Make a transform layer Draw on the layer below Transform the Transform Layer Draw on the layer again Transform the Transform Layer again for 1-3 times I don't know what causes the 1-3 times inconsistency. Video here https://www.youtube.com/watch?v=cHFf4BQovxE (gdb) bt #0 0x00007ffff44f40bb in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 #1 0x00007ffff44f5f5d in __GI_abort () at abort.c:90 #2 0x00007ffff4ed1107 in () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #3 0x00007ffff678c584 in kis_assert_common(char const*, char const*, int, bool, bool) (assertion=0x7ffff239e698 "0 && \"sanity check failed: the tile has already been removed!\"", file=0x7ffff239e628 "/home/managor/Sourcebuilding/krita/krita-testing-4.0.0/libs/image/tiles3/KisTiledExtentManager.cpp", line=53, throwException=false, isIgnorable=false) at ./libs/global/kis_assert.cpp:90 #4 0x00007ffff678c89c in kis_assert_recoverable(char const*, char const*, int) (assertion=0x7ffff239e698 "0 && \"sanity check failed: the tile has already been removed!\"", file=0x7ffff239e628 "/home/managor/Sourcebuilding/krita/krita-testing-4.0.0/libs/image/tiles3/KisTiledExtentManager.cpp", line=53) at ./libs/global/kis_assert.cpp:103 #5 0x00007ffff206324a in (anonymous namespace)::removeTileFromMap(int, QMap<int, int>*) (index=18, map=0x7fff94013590) at ./libs/image/tiles3/KisTiledExtentManager.cpp:53 #6 0x00007ffff206345a in KisTiledExtentManager::notifyTileRemoved(int, int) (this=0x7fff94013588, col=18, row=0) at ./libs/image/tiles3/KisTiledExtentManager.cpp:94 #7 0x00007ffff20599d0 in KisTiledDataManager::purge(QRect const&) (this=0x7fff94013550, area=...) at ./libs/image/tiles3/kis_tiled_data_manager.cc:298 #8 0x00007ffff227af5b in KisDataManager::purge(QRect const&) (this=0x7fff94013550, area=...) at ./libs/image/kis_datamanager.h:133 #9 0x00007ffff2275dc7 in KisPaintDevice::purgeDefaultPixels() (this=0x7fff94003770) at ./libs/image/kis_paint_device.cc:1416 #10 0x00007ffff22d4011 in KisTransformWorker::runPartial(QRect const&) (this=0x7fffa17e7560, processRect=...) at ./libs/image/kis_transform_worker.cc:410 #11 0x00007ffff22d3176 in KisTransformWorker::run() (this=0x7fffa17e7560) at ./libs/image/kis_transform_worker.cc:237 #12 0x00007fffbabf6751 in KisTransformUtils::transformDevice(ToolTransformArgs const&, KisSharedPtr<KisPaintDevice>, KisProcessingVisitor::ProgressHelper*) (config=..., device=..., helper=0x7fffa17e7730) at ./plugins/tools/tool_transform2/kis_transform_utils.cpp:287 #13 0x00007fffbab51b61 in KisTransformMaskAdapter::transformDevice(KisSharedPtr<KisNode>, KisSharedPtr<KisPaintDevice>, KisSharedPtr<KisPaintDevice>) const (this=0x55556013a390, node=..., src=..., dst=...) at ./plugins/tools/tool_transform2/kis_transform_mask_adapter.cpp:71 #14 0x00007ffff2198d53 in KisTransformMask::decorateRect(KisSharedPtr<KisPaintDevice>&, KisSharedPtr<KisPaintDevice>&, QRect const&, KisNode::PositionToFilthy) const (this=0x5555607f1a90, src=..., dst=..., rc=..., maskPos=KisNode::N_FILTHY) at ./libs/image/kis_transform_mask.cpp:252 #15 0x00007ffff223a88b in KisMask::apply(KisSharedPtr<KisPaintDevice>, QRect const&, QRect const&, KisNode::PositionToFilthy) const (this=0x5555607f1a90, projection=..., applyRect=..., needRect=..., maskPos=KisNode::N_FILTHY) at ./libs/image/kis_mask.cc:296 #16 0x00007ffff2211fd7 in KisLayer::applyMasks(KisSharedPtr<KisPaintDevice>, KisSharedPtr<KisPaintDevice>, QRect const&, KisSharedPtr<KisNode>, KisSharedPtr<KisNode>) const (this=0x5555608ec270, source=..., destination=..., requestedRect=..., filthyNode=..., lastNode=...) at ./libs/image/kis_layer.cc:688 #17 0x00007ffff221255b in KisLayer::updateProjection(QRect const&, KisSharedPtr<KisNode>) (this=0x5555608ec270, rect=..., filthyNode=...) at ./libs/image/kis_layer.cc:720 #18 0x00007ffff221b285 in KisLayerProjectionPlane::recalculate(QRect const&, KisSharedPtr<KisNode>) (this=0x5555608d9820, rect=..., filthyNode=...) at ./libs/image/kis_layer_projection_plane.cpp:47 #19 0x00007ffff21b080b in KisAsyncMerger::startMerge(KisBaseRectsWalker&, bool) (this=0x5555608cf2f8, walker=..., notifyClones=true) at ./libs/image/kis_async_merger.cpp:266 #20 0x00007ffff239cb36 in KisUpdateJobItem::runMergeJob() (this=0x5555608cf2b0) at ./obj-x86_64-linux-gnu/libs/image/kritaimage_autogen/EWIEGA46WW/../../../../../libs/image/kis_update_job_item.h:117 #21 0x00007ffff239c981 in KisUpdateJobItem::run() (this=0x5555608cf2b0) at ./obj-x86_64-linux-gnu/libs/image/kritaimage_autogen/EWIEGA46WW/../../../../../libs/image/kis_update_job_item.h:85 #22 0x00007ffff4ee2581 in () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #23 0x00007ffff4ee629d in () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #24 0x00007fffede7c7fc in start_thread (arg=0x7fffa17e8700) at pthread_create.c:465 #25 0x00007ffff45d1b5f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95 Hm, at least this backtrace leads to a clear assert. IÍ„'m unable to reproduce this any more. Did something change? Wolthera's crash is in the tile manager; yours was an assert, so I'm quite sure it's not the same thing in the end. The assert should have been fixed when dmitry fixed the lockless hash table. the original backtrace shows a kernel assert when creating threads: I suspect that that has to do with the lockless patches as well because of the conext. Since Dmitry fixed all of that, I'm closing the report. |