Bug 386498 - Crash with multithreaded brushes.(segfault with gdb backtrace)
Summary: Crash with multithreaded brushes.(segfault with gdb backtrace)
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: Brush engines (show other bugs)
Version: git master (please specify the git hash!)
Platform: unspecified All
: NOR crash
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-11-03 16:59 UTC by wolthera
Modified: 2017-11-24 22:16 UTC (History)
3 users (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 wolthera 2017-11-03 16:59:00 UTC
Might be related to 386497.

This one happens with predefined brushes while I was testing rad's sharpness patch. As I cannot see sharpness mentioned in the backtrace, I suspect it is a general bug:

Backtrace
----------
Thread 617 "Thread (pooled)" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffbffff700 (LWP 32354)]
KisDabRenderingQueue::addDab (this=0x7fffb805b910, request=..., opacity=<optimized out>, flow=<optimized out>)
    at /home/wolthera/krita/src/plugins/paintops/defaultpaintops/brush/KisDabRenderingQueue.cpp:177
177             if (m_d->jobs[lastDabJobIndex]->status == KisDabRenderingJob::Completed) {
(gdb) thread apply all backtrace

Thread 620 (Thread 0x7fffc5bd0700 (LWP 32357)):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007ffff590cae5 in QBasicMutex::lockInternal() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007ffff590cb47 in QMutex::lock() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007fffc75758c8 in QMutexLocker::QMutexLocker (m=0x7fffb805b0a0, this=<synthetic pointer>)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qmutex.h:200
#4  KisDabRenderingQueue::fetchCachedPaintDevce (this=this@entry=0x7fffb805b910)
    at /home/wolthera/krita/src/plugins/paintops/defaultpaintops/brush/KisDabRenderingQueue.cpp:372
#5  0x00007fffc7577eb8 in KisDabRenderingJobRunner::executeOneJob (job=0x7fffac1c2b50, resources=resources@entry=
    0x7fffb4152830, parentQueue=0x7fffb805b910)
    at /home/wolthera/krita/src/plugins/paintops/defaultpaintops/brush/KisDabRenderingJob.cpp:122
#6  0x00007fffc7577fef in KisDabRenderingJobRunner::run (this=0x7fffac08bcb0)
    at /home/wolthera/krita/src/plugins/paintops/defaultpaintops/brush/KisDabRenderingJob.cpp:146
#7  0x00007ffff777ab1f in FreehandStrokeStrategy::doStrokeCallback (this=0x18116f10, data=0x7fffac043480)
    at /home/wolthera/krita/src/libs/ui/tool/strokes/freehand_stroke.cpp:223
#8  0x00007ffff30f7626 in KisStrokeJob::run (this=<optimized out>)
    at /home/wolthera/krita/build/libs/image/../../../src/libs/image/kis_stroke_job.h:44
#9  KisUpdateJobItem::run (this=0x12b488e0)
    at /home/wolthera/krita/build/libs/image/../../../src/libs/image/kis_update_job_item.h:90
#10 0x00007ffff5911c73 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#11 0x00007ffff5915989 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#12 0x00007fffef8866ba in start_thread (arg=0x7fffc5bd0700) at pthread_create.c:333
#13 0x00007ffff500c3dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

---Type <return> to continue, or q <return> to quit---
Thread 619 (Thread 0x7fffc53cf700 (LWP 32356)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225
#1  0x00007ffff5916826 in QWaitCondition::wait(QMutex*, unsigned long) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007ffff5911e9a in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007ffff5915989 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007fffef8866ba in start_thread (arg=0x7fffc53cf700) at pthread_create.c:333
#5  0x00007ffff500c3dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 618 (Thread 0x7fffc4bce700 (LWP 32355)):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007ffff590cae5 in QBasicMutex::lockInternal() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007ffff590cb47 in QMutex::lock() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007fffc7574aee in QMutexLocker::QMutexLocker (m=0x7fffb805b0a0, this=<synthetic pointer>)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qmutex.h:200
#4  KisDabRenderingQueue::notifyJobFinished (this=0x7fffb805b910, seqNo=92, usecsTime=3633)
    at /home/wolthera/krita/src/plugins/paintops/defaultpaintops/brush/KisDabRenderingQueue.cpp:209
#5  0x00007fffc757800a in KisDabRenderingJobRunner::run (this=0x7fffb800f4d0)
    at /home/wolthera/krita/src/plugins/paintops/defaultpaintops/brush/KisDabRenderingJob.cpp:147
#6  0x00007ffff777ab1f in FreehandStrokeStrategy::doStrokeCallback (this=0x18116f10, data=0x7fffb82296f0)
    at /home/wolthera/krita/src/libs/ui/tool/strokes/freehand_stroke.cpp:223
#7  0x00007ffff30f7626 in KisStrokeJob::run (this=<optimized out>)
    at /home/wolthera/krita/build/libs/image/../../../src/libs/image/kis_stroke_job.h:44
#8  KisUpdateJobItem::run (this=0x12b484f0)
    at /home/wolthera/krita/build/libs/image/../../../src/libs/image/kis_update_job_item.h:90
---Type <return> to continue, or q <return> to quit---
#9  0x00007ffff5911c73 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#10 0x00007ffff5915989 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#11 0x00007fffef8866ba in start_thread (arg=0x7fffc4bce700) at pthread_create.c:333
#12 0x00007ffff500c3dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 617 (Thread 0x7fffbffff700 (LWP 32354)):
#0  KisDabRenderingQueue::addDab (this=0x7fffb805b910, request=..., opacity=<optimized out>, flow=<optimized out>)
    at /home/wolthera/krita/src/plugins/paintops/defaultpaintops/brush/KisDabRenderingQueue.cpp:177
#1  0x00007fffc757881e in KisDabRenderingExecutor::addDab (this=0x7fffb805b880, request=..., 
    opacity=<optimized out>, flow=<optimized out>)
    at /home/wolthera/krita/src/plugins/paintops/defaultpaintops/brush/KisDabRenderingExecutor.cpp:61
#2  0x00007fffc756d271 in KisBrushOp::paintAt (this=0x7fffb8099900, info=...)
    at /home/wolthera/krita/src/plugins/paintops/defaultpaintops/brush/kis_brushop.cpp:161

#3  0x00007ffff2ef1eba in KisPaintInformation::paintAt<KisPaintOp> (distanceInfo=0x18158c70, op=..., 
    this=0x7fffbfffe8e0) at /home/wolthera/krita/src/libs/image/brushengine/kis_paint_information.h:115
#4  KisPaintOpUtils::paintLine<KisPaintOp> (op=..., pi1=..., pi2=..., 
    currentDistance=currentDistance@entry=0x18158c70, fanCornersEnabled=true, fanCornersStep=0.20943951023931953)
    at /home/wolthera/krita/src/libs/image/brushengine/kis_paintop_utils.h:96
#5  0x00007ffff2ef1933 in KisPaintOp::paintLine (this=this@entry=0x7fffb8099900, pi1=..., pi2=..., 
    currentDistance=currentDistance@entry=0x18158c70)
    at /home/wolthera/krita/src/libs/image/brushengine/kis_paintop.cc:158
#6  0x00007fffc756fd60 in KisBrushOp::paintLine (this=0x7fffb8099900, pi1=..., pi2=..., 
    currentDistance=0x18158c70)
    at /home/wolthera/krita/src/plugins/paintops/defaultpaintops/brush/kis_brushop.cpp:351
#7  0x00007ffff2ef0ff4 in paintBezierCurve (paintOp=0x7fffb8099900, pi1=..., control1=..., control2=..., pi2=..., 
---Type <return> to continue, or q <return> to quit---
    currentDistance=0x18158c70) at /home/wolthera/krita/src/libs/image/brushengine/kis_paintop.cc:125
#8  0x00007ffff2ef123a in KisPaintOp::paintBezierCurve (this=<optimized out>, pi1=..., control1=..., 
    control2=..., pi2=..., currentDistance=<optimized out>)
    at /home/wolthera/krita/src/libs/image/brushengine/kis_paintop.cc:148
#9  0x00007ffff777aed2 in FreehandStrokeStrategy::doStrokeCallback (this=0x18116f10, data=<optimized out>)
    at /home/wolthera/krita/src/libs/ui/tool/strokes/freehand_stroke.cpp:185
#10 0x00007ffff30f7626 in KisStrokeJob::run (this=<optimized out>)
    at /home/wolthera/krita/build/libs/image/../../../src/libs/image/kis_stroke_job.h:44
#11 KisUpdateJobItem::run (this=0x12b48a30)
    at /home/wolthera/krita/build/libs/image/../../../src/libs/image/kis_update_job_item.h:90
#12 0x00007ffff5911c73 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#13 0x00007ffff5915989 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#14 0x00007fffef8866ba in start_thread (arg=0x7fffbffff700) at pthread_create.c:333
#15 0x00007ffff500c3dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 11 (Thread 0x7fff97fff700 (LWP 31733)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007ffff59168eb in QWaitCondition::wait(QMutex*, unsigned long) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007ffff6672d8a in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#3  0x00007ffff5915989 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007fffef8866ba in start_thread (arg=0x7fff97fff700) at pthread_create.c:333
#5  0x00007ffff500c3dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 10 (Thread 0x7fffaa0b4700 (LWP 31732)):
---Type <return> to continue, or q <return> to quit---
#0  0x00007ffff500070d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007fffee28e38c in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fffee28e49c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007ffff5b3e92f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007ffff5ae77ca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007ffff5910cd4 in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007fffdc4800c5 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#7  0x00007ffff5915989 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8  0x00007fffef8866ba in start_thread (arg=0x7fffaa0b4700) at pthread_create.c:333
#9  0x00007ffff500c3dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 9 (Thread 0x7fffa98b3700 (LWP 31731)):
#0  0x00007ffff4fd130d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007ffff5b3e2ad in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007ffff5914d18 in QThread::msleep(unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007ffff2ed3e2a in KisTileDataSwapper::run (
    this=0x7ffff33b3c40 <(anonymous namespace)::Q_QGS_s_instance::innerFunction()::holder+64>)
    at /home/wolthera/krita/src/libs/image/tiles3/swap/kis_tile_data_swapper.cpp:97
#4  0x00007ffff5915989 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007fffef8866ba in start_thread (arg=0x7fffa98b3700) at pthread_create.c:333
#6  0x00007ffff500c3dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 3 (Thread 0x7fffd36e3700 (LWP 31720)):
---Type <return> to continue, or q <return> to quit---
#0  0x00007ffff500070d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007fffee28e38c in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fffee28e49c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007ffff5b3e92f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007ffff5ae77ca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007ffff5910cd4 in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007fffefab1b75 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5
#7  0x00007ffff5915989 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8  0x00007fffef8866ba in start_thread (arg=0x7fffd36e3700) at pthread_create.c:333
#9  0x00007ffff500c3dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 2 (Thread 0x7fffded4a700 (LWP 31718)):
#0  0x00007ffff500070d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007ffff3611c62 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#2  0x00007ffff36138d7 in xcb_wait_for_event () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#3  0x00007fffe1092329 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#4  0x00007ffff5915989 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007fffef8866ba in start_thread (arg=0x7fffded4a700) at pthread_create.c:333
#6  0x00007ffff500c3dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 1 (Thread 0x7fffe11c3900 (LWP 31714)):
#0  0x00007ffff500070d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007fffee28e38c in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
---Type <return> to continue, or q <return> to quit---
#2  0x00007fffee28e49c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007ffff5b3e92f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007ffff5ae77ca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007ffff5af0704 in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00000000004052e2 in main (argc=1, argv=<optimized out>) at /home/wolthera/krita/src/krita/main.cc:305
(gdb) 
(gdb)
Comment 1 Alvin Wong 2017-11-03 17:06:29 UTC
*** Bug 386497 has been marked as a duplicate of this bug. ***
Comment 2 Alvin Wong 2017-11-03 17:12:21 UTC
Marking as confirmed since another user got the crash with the same backtrace.
Comment 3 Scott Petrovic 2017-11-04 15:12:49 UTC
*** Bug 386523 has been marked as a duplicate of this bug. ***
Comment 4 Alvin Wong 2017-11-06 16:18:20 UTC
I definitely almost* always get this crash with the built-in presets PixelArt_Dithering, PixelArt_Square and PixelArt_Round, seems to always crash for me after a few strokes.

* Except for the two times that I got the crash from bug 386523 instead
Comment 5 Dmitry Kazakov 2017-11-24 22:16:34 UTC
Git commit d123397f6118a038e182e9e51a959bf7372c4cb9 by Dmitry Kazakov.
Committed on 24/11/2017 at 22:16.
Pushed by dkazakov into branch 'master'.

Fix a crash in the multithreaded brush

The cached value of 'lastDabJobInQueue' was calculated incorrectly.

Ref T7309
Related: bug 386497, bug 386523

The fix might also affect the crash in 386523, but I'm not sure about it

M  +3    -1    plugins/paintops/defaultpaintops/brush/KisDabRenderingQueue.cpp

https://commits.kde.org/krita/d123397f6118a038e182e9e51a959bf7372c4cb9