Bug 480401 - Quickly switching through images in Gwenview can cause it to crash.
Summary: Quickly switching through images in Gwenview can cause it to crash.
Status: REPORTED
Alias: None
Product: gwenview
Classification: Applications
Component: general (show other bugs)
Version: 23.08.4
Platform: Arch Linux Linux
: NOR crash
Target Milestone: ---
Assignee: Gwenview Bugs
URL:
Keywords: drkonqi
Depends on:
Blocks:
 
Reported: 2024-01-27 18:39 UTC by Damian Höster
Modified: 2024-11-24 08:21 UTC (History)
4 users (show)

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 Damian Höster 2024-01-27 18:39:57 UTC
Application: gwenview (23.08.4)

Qt Version: 5.15.12
Frameworks Version: 5.114.0
Operating System: Linux 6.7.1-zen1-1-zen x86_64
Windowing System: X11
Distribution: "Arch Linux"
DrKonqi: 5.27.10 [KCrashBackend]

-- Information about the crash:
Images were pretty standard JPEG images, no insane resolution. On a Btrfs RAID5 array connected over USB. There was high load on the volume when the issue occured, and I could not reproduce the issue a couple minutes later.

The crash can be reproduced sometimes.

-- Backtrace:
Application: Gwenview (gwenview), signal: Segmentation fault
Content of s_kcrashErrorMessage: std::unique_ptr<char []> = {get() = 0x0}
[KCrash Handler]
#6  0x00007bf48751a8df in  () at /usr/lib/libjxl.so.0.9
#7  0x00007bf4875e61f0 in JxlDecoderGetColorAsEncodedProfile () at /usr/lib/libjxl.so.0.9
#8  0x00007bf4982826d9 in QJpegXLHandler::countALLFrames() (this=0x7bf448013b20) at /usr/src/debug/kimageformats5/kimageformats-5.114.0/src/imageformats/jxl.cpp:270
#9  0x00007bf498282de1 in QJpegXLHandler::ensureALLCounted() const (this=<optimized out>) at /usr/src/debug/kimageformats5/kimageformats-5.114.0/src/imageformats/jxl.cpp:104
#10 0x00007bf4982833fd in QJpegXLHandler::read(QImage*) (this=0x7bf448013b20, image=0x7bf4759ffa50) at /usr/src/debug/kimageformats5/kimageformats-5.114.0/src/imageformats/jxl.cpp:436
#11 0x00007bf4a81114ee in QImageReader::read(QImage*) (this=this@entry=0x7bf4759ffae0, image=image@entry=0x7bf4759ffa50) at image/qimagereader.cpp:1290
#12 0x00007bf4a811391a in QImageReader::read() (this=this@entry=0x7bf4759ffae0) at image/qimagereader.cpp:1231
#13 0x00007bf4a9b5b7f1 in Gwenview::LoadingDocumentImplPrivate::loadMetaInfo() (this=0x5fe38abf75f0) at /usr/src/debug/gwenview/gwenview-23.08.4/lib/document/loadingdocumentimpl.cpp:295
#14 0x00007bf4a9b54c04 in QtConcurrent::StoredMemberFunctionPointerCall0<bool, Gwenview::LoadingDocumentImplPrivate>::runFunctor() (this=0x5fe38aa1d5b0) at /usr/include/qt/QtConcurrent/qtconcurrentstoredfunctioncall.h:187
#15 QtConcurrent::RunFunctionTask<bool>::run() (this=0x5fe38aa1d5b0) at /usr/include/qt/QtConcurrent/qtconcurrentrunbase.h:114
#16 0x00007bf4a797e541 in QThreadPoolThread::run() (this=0x5fe38aa0a070) at thread/qthreadpool.cpp:100
#17 0x00007bf4a797979a in operator() (__closure=<optimized out>) at thread/qthread_unix.cpp:350
#18 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at thread/qthread_unix.cpp:287
#19 QThreadPrivate::start(void*) (arg=0x5fe38aa0a070) at thread/qthread_unix.cpp:310
#20 0x00007bf4a748e9eb in start_thread (arg=<optimized out>) at pthread_create.c:444
#21 0x00007bf4a75127cc in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

Thread 4 (Thread 0x7bf4860006c0 (LWP 408101) "gwenview"):
#1  __pselect (nfds=nfds@entry=5, readfds=readfds@entry=0x7bf485ff7b60, writefds=writefds@entry=0x0, exceptfds=exceptfds@entry=0x0, timeout=<optimized out>, timeout@entry=0x7bf485ff7b50, sigmask=sigmask@entry=0x0) at ../sysdeps/unix/sysv/linux/pselect.c:56
#2  0x00007bf4a27356f9 in usbmuxd_listen_inotify () at /usr/src/debug/libusbmuxd/libusbmuxd-2.0.2/src/libusbmuxd.c:923
#3  0x00007bf4a27363cc in usbmuxd_listen () at /usr/src/debug/libusbmuxd/libusbmuxd-2.0.2/src/libusbmuxd.c:979
#4  device_monitor (data=<optimized out>) at /usr/src/debug/libusbmuxd/libusbmuxd-2.0.2/src/libusbmuxd.c:1107
#5  0x00007bf4a748e9eb in start_thread (arg=<optimized out>) at pthread_create.c:444
#6  0x00007bf4a75127cc in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

Thread 3 (Thread 0x7bf486c006c0 (LWP 408100) "Gwenview::Thumb"):
#1  __futex_abstimed_wait_common (futex_word=futex_word@entry=0x5fe38a16b550, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0, cancel=cancel@entry=true) at futex-internal.c:87
#2  0x00007bf4a748b52f in __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x5fe38a16b550, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0) at futex-internal.c:139
#3  0x00007bf4a748dd40 in __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x5fe38a16b500, cond=0x5fe38a16b528) at pthread_cond_wait.c:503
#4  ___pthread_cond_wait (cond=0x5fe38a16b528, mutex=0x5fe38a16b500) at pthread_cond_wait.c:618
#5  0x00007bf4a7981524 in QWaitConditionPrivate::wait(QDeadlineTimer) (deadline=..., this=0x5fe38a16b500) at thread/qwaitcondition_unix.cpp:146
#6  QWaitCondition::wait(QMutex*, QDeadlineTimer) (this=this@entry=0x5fe38a13b8e0, mutex=mutex@entry=0x5fe38a13b8d8, deadline=...) at thread/qwaitcondition_unix.cpp:225
#7  0x00007bf4a9babe36 in Gwenview::ThumbnailGenerator::run() (this=0x5fe38a13b870) at /usr/src/debug/gwenview/gwenview-23.08.4/lib/thumbnailprovider/thumbnailgenerator.cpp:265
#8  0x00007bf4a797979a in operator() (__closure=<optimized out>) at thread/qthread_unix.cpp:350
#9  (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at thread/qthread_unix.cpp:287
#10 QThreadPrivate::start(void*) (arg=0x5fe38a13b870) at thread/qthread_unix.cpp:310
#11 0x00007bf4a748e9eb in start_thread (arg=<optimized out>) at pthread_create.c:444
#12 0x00007bf4a75127cc in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

Thread 2 (Thread 0x7bf4a18006c0 (LWP 408090) "QDBusConnection"):
#1  0x00007bf4a55742f6 in g_main_context_poll_unlocked (priority=2147483647, n_fds=1, fds=0x7bf49c00f130, timeout=<optimized out>, context=0x7bf49c000c50) at ../glib/glib/gmain.c:4653
#2  g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x7bf49c000c50, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4344
#3  0x00007bf4a5514162 in g_main_context_iteration (context=0x7bf49c000c50, may_block=1) at ../glib/glib/gmain.c:4414
#4  0x00007bf4a7b70d0c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7bf49c000b70, flags=...) at kernel/qeventdispatcher_glib.cpp:423
#5  0x00007bf4a7b20c04 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7bf4a17ffbd0, flags=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:69
#6  0x00007bf4a797d576 in QThread::exec() (this=this@entry=0x7bf4a7e3e660 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at ../../include/QtCore/../../src/corelib/global/qflags.h:121
#7  0x00007bf4a7dd6a9a in QDBusConnectionManager::run() (this=0x7bf4a7e3e660 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at /usr/src/debug/qt5-base/qtbase/src/dbus/qdbusconnection.cpp:179
#8  0x00007bf4a797979a in operator() (__closure=<optimized out>) at thread/qthread_unix.cpp:350
#9  (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at thread/qthread_unix.cpp:287
#10 QThreadPrivate::start(void*) (arg=0x7bf4a7e3e660 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at thread/qthread_unix.cpp:310
#11 0x00007bf4a748e9eb in start_thread (arg=<optimized out>) at pthread_create.c:444
#12 0x00007bf4a75127cc in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

Thread 1 (Thread 0x7bf4a1eb6e40 (LWP 408089) "gwenview"):
#1  0x00007bf4a7975b3c in QtLinuxFutex::_q_futex(int*, int, int, unsigned long long, int*, int) (val3=0, addr2=0x0, val2=0, val=<optimized out>, op=0, addr=<optimized out>, addr=<optimized out>, op=<optimized out>, val=<optimized out>, val2=<optimized out>, addr2=<optimized out>, val3=<optimized out>) at thread/qfutex_p.h:114
#2  QtLinuxFutex::futexWait<QBasicAtomicInteger<unsigned int> >(QBasicAtomicInteger<unsigned int>&, QBasicAtomicInteger<unsigned int>::Type) (expectedValue=<optimized out>, futex=<optimized out>) at thread/qfutex_p.h:133
#3  futexSemaphoreTryAcquire_loop<false>(QBasicAtomicInteger<unsigned long long>&, unsigned long long, unsigned long long, int) (timeout=-1, nn=8589934593, curValue=<optimized out>, u=...) at thread/qsemaphore.cpp:219
#4  futexSemaphoreTryAcquire<false>(QBasicAtomicInteger<unsigned long long>&, int, int) (timeout=-1, n=<optimized out>, u=...) at thread/qsemaphore.cpp:262
#5  QSemaphore::acquire(int) (this=0x7ffdde44ad80, n=<optimized out>) at thread/qsemaphore.cpp:326
#6  0x00007bf4a7b56f36 in doActivate<false>(QObject*, int, void**) (sender=0x5fe38a1120f0, signal_index=0, argv=0x7ffdde44ae00) at kernel/qobject.cpp:3906
#7  0x00007bf4a7b57224 in QObject::destroyed(QObject*) (this=<optimized out>, _t1=<optimized out>) at .moc/moc_qobject.cpp:219
#8  0x00007bf4a7b4d33c in QObject::~QObject() (this=0x5fe38a1120f0, this=<optimized out>) at kernel/qobject.cpp:1010
#9  0x00007bf4a7e1ba5e in QDBusServiceWatcher::~QDBusServiceWatcher() (this=0x5fe38a1120f0, this=<optimized out>) at /usr/src/debug/qt5-base/qtbase/src/dbus/qdbusservicewatcher.cpp:260
#10 0x00007bf4a7b4cbad in QObjectPrivate::deleteChildren() (this=this@entry=0x5fe38a111ef0) at kernel/qobject.cpp:2137
#11 0x00007bf4a7b4d329 in QObject::~QObject() (this=this@entry=0x5fe38a111ed0, this=<optimized out>) at kernel/qobject.cpp:1115
#12 0x00007bf4a7dec468 in QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase() (this=0x5fe38a111ed0, this=<optimized out>) at /usr/src/debug/qt5-base/qtbase/src/dbus/qdbusabstractinterface.h:68
#13 0x00007bf499a3f248 in OrgKdeKWinTabletModeManagerInterface::~OrgKdeKWinTabletModeManagerInterface() (this=0x5fe38a111ed0, this=<optimized out>) at /usr/src/debug/kirigami2/build/src/libkirigami/tabletmodemanager_interface.cpp:25
#14 OrgKdeKWinTabletModeManagerInterface::~OrgKdeKWinTabletModeManagerInterface() (this=0x5fe38a111ed0, this=<optimized out>) at /usr/src/debug/kirigami2/build/src/libkirigami/tabletmodemanager_interface.cpp:25
#15 0x00007bf4a7b4cbad in QObjectPrivate::deleteChildren() (this=this@entry=0x5fe38a111e40) at kernel/qobject.cpp:2137
#16 0x00007bf4a7b4d329 in QObject::~QObject() (this=<optimized out>, this=<optimized out>) at kernel/qobject.cpp:1115
#17 0x00007bf499a3c7ce in Kirigami::(anonymous namespace)::Q_QGS_privateTabletModeWatcherSelf::innerFunction()::Holder::~Holder() () at /usr/src/debug/kirigami2/kirigami2-5.114.0/src/libkirigami/tabletmodewatcher.cpp:21
#18 0x00007bf4a7442cc6 in __run_exit_handlers (status=status@entry=1, listp=0x7bf4a75da680 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true, run_dtors=run_dtors@entry=true) at exit.c:111
#19 0x00007bf4a7442e10 in __GI_exit (status=status@entry=1) at exit.c:141
#20 0x00007bf4a1a31066 in QXcbConnection::processXcbEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x5fe389edadc0, flags=...) at /usr/src/debug/qt5-base/qtbase/src/plugins/platforms/xcb/qxcbconnection.cpp:1051
#21 0x00007bf4a1a61558 in xcbSourceDispatch(GSource*, GSourceFunc, gpointer) (source=<optimized out>) at /usr/src/debug/qt5-base/qtbase/src/plugins/platforms/xcb/qxcbeventdispatcher.cpp:103
#22 0x00007bf4a5515f69 in g_main_dispatch (context=0x7bf49c000ec0) at ../glib/glib/gmain.c:3476
#23 0x00007bf4a55743a7 in g_main_context_dispatch_unlocked (context=0x7bf49c000ec0) at ../glib/glib/gmain.c:4284
#24 g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x7bf49c000ec0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4349
#25 0x00007bf4a5514162 in g_main_context_iteration (context=0x7bf49c000ec0, may_block=1) at ../glib/glib/gmain.c:4414
#26 0x00007bf4a7b70d0c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x5fe389f8db30, flags=...) at kernel/qeventdispatcher_glib.cpp:423
#27 0x00007bf4a7b20c04 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffdde44b400, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:69
#28 0x00007bf4a7b220a3 in QCoreApplication::exec() () at ../../include/QtCore/../../src/corelib/global/qflags.h:121
#29 0x00007bf4a8093f12 in QGuiApplication::exec() () at kernel/qguiapplication.cpp:1870
#30 0x00007bf4a87b8cda in QApplication::exec() () at kernel/qapplication.cpp:2832
#31 0x00005fe389beba49 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/gwenview/gwenview-23.08.4/app/main.cpp:213
Warning: the current language does not match this frame.
[Inferior 1 (process 408089) detached]

Reported using DrKonqi
Comment 1 Albert Astals Cid 2024-01-29 22:37:51 UTC
@Nico: From my debugging gwenview a while ago, it has a rather bad threading implementation, so I would rather vote the bug is in gwenview over in kimageformats unless proven otherwise.