Bug 417667 - Bad allocation crash
Summary: Bad allocation crash
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: General (show other bugs)
Version: nightly build (please specify the git hash!)
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: Dmitry Kazakov
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-02-14 20:53 UTC by M
Modified: 2020-04-23 20:53 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
GDB backtrace (20.99 KB, text/plain)
2020-02-14 20:53 UTC, M
Details

Note You need to log in before you can comment on or make changes to this bug.
Description M 2020-02-14 20:53:07 UTC
Created attachment 126037 [details]
GDB backtrace

SUMMARY
I'm not certain what the cause of this crash is, but a document with clone layers, each with a transform mask, has a chance to provoke crashes after editing the original layer. I'll attach my GDB backtrace. If needed, I can add the particular Krita document causing it too.

STEPS TO REPRODUCE
1. Prepare a paint layer or group.
2. Create one or more clone layers of it.
3. Add transform masks to the clones, create some transformation operation. (I used liquify in my document)
4. Paint on the original, possibly try a Smudge brush with Overlay Mode activated or a Clone brush with Clone From All Visible Layers.

OBSERVED RESULT
When editing the original layer, there is a chance that Krita terminates. Smudge brush in Overlay Mode seems most certain to provoke it.

EXPECTED RESULT
No crash.

SOFTWARE/OS VERSIONS
Currently running Dmitry's fix-deadlock-on-loading-415891 branch, but the crashes also happen in 4.2.8 and current master, though I don't have backtraces for those 2.
Comment 1 Halla Rempt 2020-02-14 21:24:50 UTC
Looks like it's in the middle of Qt's opengl code?
Comment 2 Halla Rempt 2020-02-17 14:43:11 UTC
We could try to reproduce with the original document, so please make that available, but I really doubt it's actually a bug in Krita.
Comment 3 Bug Janitor Service 2020-03-03 04:33:11 UTC
Dear Bug Submitter,

This bug has been in NEEDSINFO status with no change for at least
15 days. Please provide the requested information as soon as
possible and set the bug status as REPORTED. Due to regular bug
tracker maintenance, if the bug is still in NEEDSINFO status with
no change in 30 days the bug will be closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

If you have already provided the requested information, please
mark the bug as REPORTED so that the KDE team knows that the bug is
ready to be confirmed.

Thank you for helping us make KDE software even better for everyone!
Comment 4 Bug Janitor Service 2020-03-18 04:33:14 UTC
This bug has been in NEEDSINFO status with no change for at least
30 days. The bug is now closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

Thank you for helping us make KDE software even better for everyone!
Comment 5 M 2020-04-18 09:42:05 UTC
Apologies for the delay, I didn't return to the document for a while. Here's the download: https://www.dropbox.com/s/jjf24x7hta47tu7/2020%201%20macaws.kra?dl=0

I can still provoke the crash in current master. No difference when I run Krita on the Nvidia GPU instead of Intel.

Easiest way to trigger I found is trying to apply a filter onto one of the source layers (macaw 1, macaw 2 in the document). Pick an adjustment filter that has curves or sliders and continuously drag a handle around until Krita freezes (usually less than 30 sec).
Comment 6 Halla Rempt 2020-04-18 10:30:58 UTC
On which layer should I try to paint to reproduce the issue?
Comment 7 M 2020-04-18 10:40:50 UTC
Also on macaw 1 or macaw 2, inside the folders with the same name. Those folders are the clone sources.

But yeah, crash from filter has been most reliable.
Comment 8 Halla Rempt 2020-04-18 11:28:11 UTC
Thanks, I can reproduce it :-) Interesting output, too:

SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
Qt Concurrent has caught an exception thrown from a worker thread.
This is not supported, exceptions thrown in worker threads must be
caught before control returns to Qt Concurrent.
SAFE ASSERT (krita): "m_index.isEmpty()" in file /home/boud/dev/4.3/libs/image/tiles3/kis_memento_manager.cc, line 238
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
i965: Failed to submit batchbuffer: Bad file descriptor
KCrash: crashing... crashRecursionCounter = 2
KCrash: Application Name = krita path = /home/boud/dev/i-4.3/bin pid = 7260
KCrash: Arguments: /home/boud/dev/i-4.3/bin/krita /home/boud/Downloads/2020 1 macaws.kra 
KCrash: Attempting to start /usr/lib/x86_64-linux-gnu/libexec/drkonqi from kdeinit
sock_file=/run/user/1000/kdeinit5__0
Comment 9 Halla Rempt 2020-04-18 11:28:31 UTC
I'll assign to dmitry.
Comment 10 Dmitry Kazakov 2020-04-23 19:27:31 UTC
Hm.. std::bad_alloc... sounds really interesting :)
Comment 11 Dmitry Kazakov 2020-04-23 19:42:20 UTC
Okay, actual crash happens because of liquify transformation in the transformation mask:

==32==ERROR: AddressSanitizer: attempting double-free on 0x62d001158400 in thread T42 (Thread (pooled)):
==32==AddressSanitizer: while reporting a bug found another one. Ignoring.
==32==AddressSanitizer: while reporting a bug found another one. Ignoring.
    #0 0x7f54f3cd532a in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x9832a)
    #1 0x7f54eba7124a in QTypedArrayData<QPointF>::deallocate(QArrayData*) /home/appimage/appimage-workspace/deps/usr/include/QtCore/qarraydata.h:239
    #2 0x7f54eba7124a in QVector<QPointF>::freeData(QTypedArrayData<QPointF>*) /home/appimage/appimage-workspace/deps/usr/include/QtCore/qvector.h:543
    #3 0x7f54eba7124a in QVector<QPointF>::reallocData(int, int, QFlags<QArrayData::AllocationOption>) /home/appimage/appimage-workspace/deps/usr/include/QtCore/qvector.h:639
    #4 0x7f54ebefdb0b in QVector<QPointF>::detach() /home/appimage/appimage-workspace/deps/usr/include/QtCore/qvector.h:390
    #5 0x7f54ebefdb0b in QVector<QPointF>::data() /home/appimage/appimage-workspace/deps/usr/include/QtCore/qvector.h:127
    #6 0x7f54ebefdb0b in QVector<QPointF>::operator[](int) /home/appimage/appimage-workspace/deps/usr/include/QtCore/qvector.h:438
    #7 0x7f54ebefdb0b in KisLiquifyTransformWorker::approxChangeRect(QRect const&) /home/appimage/persistent/krita/libs/image/kis_liquify_transform_worker.cpp:462
    #8 0x7f54c06a7d8b in KisTransformUtils::changeRect(ToolTransformArgs const&, QRect const&) /home/appimage/persistent/krita/plugins/tools/tool_transform2/kis_transform_utils.cpp:391
    #9 0x7f54c063211b in KisTransformMaskAdapter::nonAffineChangeRect(QRect const&) /home/appimage/persistent/krita/plugins/tools/tool_transform2/kis_transform_mask_adapter.cpp:102
    #10 0x7f54ebc7bcaf in KisTransformMask::changeRect(QRect const&, KisNode::PositionToFilthy) const /home/appimage/persistent/krita/libs/image/kis_transform_mask.cpp:336
    #11 0x7f54ebd6be61 in KisLayer::masksChangeRect(QList<KisSharedPtr<KisEffectMask> > const&, QRect const&, bool&) const /home/appimage/persistent/krita/libs/image/kis_layer.cc:585
    #12 0x7f54ebd6fb53 in KisLayer::changeRect(QRect const&, KisNode::PositionToFilthy) const /home/appimage/persistent/krita/libs/image/kis_layer.cc:838
    #13 0x7f54ebd7c37f in KisLayerProjectionPlane::changeRect(QRect const&, KisNode::PositionToFilthy) const /home/appimage/persistent/krita/libs/image/kis_layer_projection_plane.cpp:146
    #14 0x7f54ebce3305 in KisBaseRectsWalker::calculateChecksum(QSharedPointer<KisProjectionLeaf>, QRect const&) /home/appimage/persistent/krita/libs/image/kis_base_rects_walker.h:437
    #15 0x7f54ebce3305 in KisBaseRectsWalker::collectRects(KisSharedPtr<KisNode>, QRect const&) /home/appimage/persistent/krita/libs/image/kis_base_rects_walker.h:129
    #16 0x7f54ebce3305 in KisSimpleUpdateQueue::addJob(KisSharedPtr<KisNode>, QVector<QRect> const&, QRect const&, int, KisBaseRectsWalker::UpdateType) /home/appimage/persistent/krita/libs/image/kis_simple_update_queue.cpp:205
    #17 0x7f54ebce5651 in KisSimpleUpdateQueue::addUpdateJob(KisSharedPtr<KisNode>, QVector<QRect> const&, QRect const&, int) /home/appimage/persistent/krita/libs/image/kis_simple_update_queue.cpp:160
    #18 0x7f54ebcf33cb in KisUpdateScheduler::updateProjection(KisSharedPtr<KisNode>, QVector<QRect> const&, QRect const&) /home/appimage/persistent/krita/libs/image/kis_update_scheduler.cpp:155
    #19 0x7f54ebd24c7b in KisImage::requestProjectionUpdateImpl(KisNode*, QVector<QRect> const&, QRect const&) /home/appimage/persistent/krita/libs/image/kis_image.cc:2099
    #20 0x7f54ebd3c1b5 in KisImage::requestProjectionUpdate(KisNode*, QVector<QRect> const&, bool) /home/appimage/persistent/krita/libs/image/kis_image.cc:2141
    #21 0x7f54ebe2f972 in KisNode::setDirty(QVector<QRect> const&) /home/appimage/persistent/krita/libs/image/kis_node.cpp:616
    #22 0x7f54ebe31442 in KisNode::setDirty(QRect const&) /home/appimage/persistent/krita/libs/image/kis_node.cpp:627
    #23 0x7f54ebbff253 in KisCloneLayer::setDirtyOriginal(QRect const&) /home/appimage/persistent/krita/libs/image/kis_clone_layer.cpp:176
    #24 0x7f54ebd6c35e in KisCloneLayersList::setDirty(QRect const&) /home/appimage/persistent/krita/libs/image/kis_layer.cc:78
    #25 0x7f54ebd6c35e in KisLayer::updateClones(QRect const&) /home/appimage/persistent/krita/libs/image/kis_layer.cc:493
    #26 0x7f54ebca5cc3 in KisBaseRectsWalker::CloneNotification::notify() /home/appimage/persistent/krita/libs/image/kis_base_rects_walker.h:88
    #27 0x7f54ebca5cc3 in KisAsyncMerger::doNotifyClones(KisBaseRectsWalker&) /home/appimage/persistent/krita/libs/image/kis_async_merger.cpp:384
    #28 0x7f54ebca5cc3 in KisAsyncMerger::startMerge(KisBaseRectsWalker&, bool) /home/appimage/persistent/krita/libs/image/kis_async_merger.cpp:308
    #29 0x7f54ec0b6cc9 in KisUpdateJobItem::runMergeJob() /home/appimage/appimage-workspace/krita-build/libs/image/../../../../persistent/krita/libs/image/kis_update_job_item.h:135
    #30 0x7f54ec0b6cc9 in KisUpdateJobItem::run() /home/appimage/appimage-workspace/krita-build/libs/image/../../../../persistent/krita/libs/image/kis_update_job_item.h:86
    #31 0x7f54e9b46f66  (/home/appimage/appimage-workspace/deps/usr/lib/libQt5Core.so.5+0xabf66)
    #32 0x7f54e9b42b1d  (/home/appimage/appimage-workspace/deps/usr/lib/libQt5Core.so.5+0xa7b1d)
    #33 0x7f54e8ec06b9 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x76b9)
    #34 0x7f54e91dd41c in clone (/lib/x86_64-linux-gnu/libc.so.6+0x10741c)
Comment 12 Dmitry Kazakov 2020-04-23 20:53:16 UTC
Git commit ef3c9fe7199886ba4f089694a042bcb154b46003 by Dmitry Kazakov.
Committed on 23/04/2020 at 20:52.
Pushed by dkazakov into branch 'master'.

Fix crash when applying liquify transformation via Transform Mask

We must not access Qt containers in non-const manner in multithreaded
environment. Qt has lazy sharing routines, which are not thread safe.

M  +19   -0    libs/global/kis_algebra_2d.h
M  +5    -11   libs/image/kis_liquify_transform_worker.cpp

https://invent.kde.org/kde/krita/commit/ef3c9fe7199886ba4f089694a042bcb154b46003
Comment 13 Dmitry Kazakov 2020-04-23 20:53:55 UTC
Git commit 06fc241c21454e97cfc22d4042bda6ba2b8799ba by Dmitry Kazakov.
Committed on 23/04/2020 at 20:53.
Pushed by dkazakov into branch 'krita/4.3'.

Fix crash when applying liquify transformation via Transform Mask

We must not access Qt containers in non-const manner in multithreaded
environment. Qt has lazy sharing routines, which are not thread safe.

M  +19   -0    libs/global/kis_algebra_2d.h
M  +5    -11   libs/image/kis_liquify_transform_worker.cpp

https://invent.kde.org/kde/krita/commit/06fc241c21454e97cfc22d4042bda6ba2b8799ba