https://bugs.kde.org/show_bug.cgi?id=485257

            Bug ID: 485257
           Summary: Snapd Backend Crash with Plasma 6 Discover
    Classification: Applications
           Product: Discover
           Version: unspecified
          Platform: Compiled Sources
                OS: Linux
            Status: REPORTED
          Keywords: drkonqi
          Severity: crash
          Priority: NOR
         Component: discover
          Assignee: plasma-b...@kde.org
          Reporter: jhanm...@ca.rr.com
                CC: aleix...@kde.org
  Target Milestone: ---

Application: plasma-discover (6.0.80)
 (Compiled from sources)
Qt Version: 6.6.3
Frameworks Version: 6.1.0
Operating System: Linux 6.1.43-vpanthor-rk35xx aarch64
Windowing System: Wayland
Distribution: Armbian-unofficial 24.5.0-trunk noble
DrKonqi: 6.0.80 [KCrashBackend]

-- Information about the crash:
No special preconditions prior to running Discover to instigate the crash.
Whether I run via the menu or via command line the same crash occurs. If I
manually specify all other backends other then the Snapd backend Discover will
successfully start. I can use the snap command line utility. I've installed
Chromium via the snap command line utility and Chromium is fully functional so
it isn't that snapd isn't alive or functional.

In order to build Discover I had to modify the system libsnap-qt due to
QSnapAuth using QStringList in the system library for the second constructor
argument whereas the Discover Snapd backend appears to use QList<QString>. This
causes a linker error. This is the only change I made to libsnapd-qt in order
to build Discover.

This will likely appear in the crash information but to offer some clear
visibility into my environment. I am running Ubuntu Noble on a Radxa Rock-5b.
This is an aarch64 machine. I had to do custom builds of Mesa (OpenGL/OpenGLES
libraries) and QT 6.6.3 to build and run Plasma 6. I built Qt 6.6.3 using
kdesrc-build. Qt and Plasma 6 are installed only locally for my user and not as
system binaries.

The crash can be reproduced every time.

-- Backtrace:
Application: Discover (plasma-discover), signal: Bus error
Content of s_kcrashErrorMessage: std::unique_ptr<char []> = {get() = 0x0}
[KCrash Handler]
#6  0x0000ffffb0114c80 in __aarch64_ldadd4_acq_rel () at
/home/jon/kde/qt/lib/libQt6Core.so.6
#7  0x0000ffffaff31684 in std::__atomic_base<int>::fetch_add
(__m=std::memory_order_acq_rel, __i=1, this=<optimized out>) at
/usr/include/c++/13/bits/atomic_base.h:635
#8  QAtomicOps<int>::ref<int> (_q_value=<optimized out>) at
/home/jon/kde/src/qtbase/src/corelib/thread/qatomic_cxx11.h:258
#9  QBasicAtomicInteger<int>::ref (this=<optimized out>) at
/home/jon/kde/src/qtbase/src/corelib/thread/qbasicatomic.h:49
#10 QThreadData::ref (this=<optimized out>) at
/home/jon/kde/src/qtbase/src/corelib/thread/qthread.cpp:99
#11 0x0000ffffafe71538 in QObjectPrivate::connectImpl
(sender=sender@entry=0xaaaac4eb7cd0, signal_index=11,
receiver=receiver@entry=0xaaaac4ebc6b0, slot=slot@entry=0xffff7fffe1d8,
slotObjRaw=slotObjRaw@entry=0xffff680013d0, type=type@entry=0,
types=types@entry=0x0, senderMetaObject=senderMetaObject@entry=0xffff9818fb10
<SnapBackend::staticMetaObject>) at
/home/jon/kde/src/qtbase/src/corelib/kernel/qobject.cpp:5189
#12 0x0000ffffafe71c40 in QObject::connectImpl
(sender=sender@entry=0xaaaac4eb7cd0, signal=signal@entry=0xffff7fffe1e8,
receiver=receiver@entry=0xaaaac4ebc6b0, slot=slot@entry=0xffff7fffe1d8,
slotObjRaw=0xffff680013d0, type=type@entry=Qt::AutoConnection,
types=types@entry=0x0, senderMetaObject=<optimized out>,
senderMetaObject@entry=0xffff9818fb10 <SnapBackend::staticMetaObject>) at
/home/jon/kde/src/qtbase/src/corelib/kernel/qobject.cpp:5119
#13 0x0000ffff9816ca38 in QObject::connect<void (SnapBackend::*)(), void
(QSnapdRequest::*)()> (type=Qt::AutoConnection, slot=@0xffff7fffe1d8: (void
(QSnapdRequest::*)(class QSnapdRequest * const)) 0xffff98101300
<QSnapdRequest::cancel()>, context=0xaaaac4ebc6b0, signal=(void
(SnapBackend::*)(class SnapBackend * const)) 0xffff981699e4
<SnapBackend::shuttingDown()>, sender=0xaaaac4eb7cd0) at
/home/jon/kde/qt/include/QtCore/qobject.h:240
#14
SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}::operator()() const (__closure=<optimized out>) at
/home/jon/kde/src/discover/libdiscover/backends/SnapBackend/SnapBackend.cpp:182
#15 std::__invoke_impl<void,
SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}&>(std::__invoke_other,
SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}&) (__f=<optimized out>) at
/usr/include/c++/13/bits/invoke.h:61
#16
std::__invoke<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}&>(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}&) (__fn=<optimized out>) at
/usr/include/c++/13/bits/invoke.h:96
#17
std::invoke<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}&>(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}&) (__fn=<optimized out>) at
/usr/include/c++/13/functional:113
#18
QtConcurrent::StoredFunctionCall<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>::runFunctor()::{lambda(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<auto:1*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1})#1}::operator()(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}) const (function=..., __closure=<optimized out>) at
/home/jon/kde/qt/include/QtConcurrent/qtconcurrentstoredfunctioncall.h:116
#19 std::__invoke_impl<void,
QtConcurrent::StoredFunctionCall<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>::runFunctor()::{lambda(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<auto:1*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1})#1} const&,
SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>(std::__invoke_other,
QtConcurrent::StoredFunctionCall<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>::runFunctor()::{lambda(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<auto:1*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1})#1} const&,
SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}&&) (__f=<synthetic pointer>...) at
/usr/include/c++/13/bits/invoke.h:61
#20
std::__invoke<QtConcurrent::StoredFunctionCall<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>::runFunctor()::{lambda(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<auto:1*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1})#1} const&,
SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>(QtConcurrent::StoredFunctionCall<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>::runFunctor()::{lambda(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<auto:1*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1})#1} const&,
SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}&&) (__fn=<synthetic pointer>...) at
/usr/include/c++/13/bits/invoke.h:96
#21
std::__apply_impl<QtConcurrent::StoredFunctionCall<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>::runFunctor()::{lambda(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<auto:1*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1})#1} const&,
std::tuple<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>,
0ul>(QtConcurrent::StoredFunctionCall<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>::runFunctor()::{lambda(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<auto:1*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1})#1} const&,
std::tuple<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>&&, std::integer_sequence<unsigned long, 0ul>)
(__t=<optimized out>, __f=<synthetic pointer>...) at
/usr/include/c++/13/tuple:2302
#22
std::apply<QtConcurrent::StoredFunctionCall<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>::runFunctor()::{lambda(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<auto:1*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1})#1} const&,
std::tuple<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>
>(QtConcurrent::StoredFunctionCall<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>::runFunctor()::{lambda(SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<auto:1*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1})#1} const&,
std::tuple<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>&&) (__t=<optimized out>, __f=<synthetic pointer>...)
at /usr/include/c++/13/tuple:2313
#23
QtConcurrent::StoredFunctionCall<SnapBackend::populateJobsWithFilter<QSnapdGetSnapsRequest>(QList<QSnapdGetSnapsRequest*>
const&, std::function<bool (QSharedPointer<QSnapdSnap>
const&)>&)::{lambda()#1}>::runFunctor() (this=<optimized out>) at
/home/jon/kde/qt/include/QtConcurrent/qtconcurrentstoredfunctioncall.h:120
#24 0x0000ffff9816c100 in QtConcurrent::RunFunctionTaskBase<void>::run
(this=0xaaaac4eb90c0) at
/home/jon/kde/qt/include/QtConcurrent/qtconcurrentrunbase.h:83
#25 0x0000ffffaffcaf20 in QThreadPoolThread::run (this=0xaaaac4ebcd30) at
/home/jon/kde/src/qtbase/src/corelib/thread/qthreadpool.cpp:66
#26 0x0000ffffaffc4718 in operator() (__closure=<optimized out>) at
/home/jon/kde/src/qtbase/src/corelib/thread/qthread_unix.cpp:324
#27 (anonymous
namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> >
(t=<optimized out>) at
/home/jon/kde/src/qtbase/src/corelib/thread/qthread_unix.cpp:260
#28 QThreadPrivate::start (arg=0xaaaac4ebcd30) at
/home/jon/kde/src/qtbase/src/corelib/thread/qthread_unix.cpp:283
#29 0x0000ffffaf8d597c in start_thread (arg=0xffffb26f9760) at
./nptl/pthread_create.c:447
#30 0x0000ffffaf93ba4c in thread_start () at
../sysdeps/unix/sysv/linux/aarch64/clone3.S:76

Thread 3 (Thread 0xffffa36eec20 (LWP 72999) "dconf worker"):
#1  0x0000ffffae9328dc in g_main_context_poll_unlocked (priority=2147483647,
n_fds=1, fds=0xffff94002590, timeout=<optimized out>, context=0xaaaac4ec93a0)
at ../../../glib/gmain.c:4521
#2  g_main_context_iterate_unlocked.isra.0
(context=context@entry=0xaaaac4ec93a0, block=block@entry=1,
dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:4212
#3  0x0000ffffae8ceb58 in g_main_context_iteration
(context=context@entry=0xaaaac4ec93a0, may_block=may_block@entry=1) at
../../../glib/gmain.c:4282
#4  0x0000ffff99b2625c in dconf_gdbus_worker_thread (user_data=0xaaaac4ec93a0)
at ../gdbus/dconf-gdbus-thread.c:82
#5  0x0000ffffae8ff248 in g_thread_proxy (data=0xaaaac4ec9590) at
../../../glib/gthread.c:835
#6  0x0000ffffaf8d597c in start_thread (arg=0xffffb26f9760) at
./nptl/pthread_create.c:447
#7  0x0000ffffaf93ba4c in thread_start () at
../sysdeps/unix/sysv/linux/aarch64/clone3.S:76

Thread 2 (Thread 0xffff7f7eec20 (LWP 73028) "pool"):
#1  0x0000ffffae92cb64 in g_cond_wait_until (cond=0xaaaac4e970a8,
mutex=0xaaaac4e970a0, end_time=<optimized out>) at
../../../glib/gthread-posix.c:1677
#2  0x0000ffffae89780c in g_async_queue_pop_intern_unlocked
(queue=0xaaaac4e970a0, wait=1, end_time=14242373462) at
../../../glib/gasyncqueue.c:378
#3  0x0000ffffae8979a0 in g_async_queue_timeout_pop (queue=0xaaaac4e970a0,
timeout=<optimized out>) at ../../../glib/gasyncqueue.c:501
#4  0x0000ffffae905854 in g_thread_pool_wait_for_new_pool () at
../../../glib/gthreadpool.c:167
#5  g_thread_pool_thread_proxy (data=<optimized out>) at
../../../glib/gthreadpool.c:394
#6  0x0000ffffae8ff248 in g_thread_proxy (data=0xffff70000b70) at
../../../glib/gthread.c:835
#7  0x0000ffffaf8d597c in start_thread (arg=0xffff999cf360) at
./nptl/pthread_create.c:447
#8  0x0000ffffaf93ba4c in thread_start () at
../sysdeps/unix/sysv/linux/aarch64/clone3.S:76

Thread 1 (Thread 0xffffb26f9020 (LWP 72987) "plasma-discover"):
#1  0x0000ffffae9328dc in g_main_context_poll_unlocked (priority=2147483647,
n_fds=1, fds=0xaaaac4ecc680, timeout=<optimized out>, context=0xaaaac4f80880)
at ../../../glib/gmain.c:4521
#2  g_main_context_iterate_unlocked.isra.0 (context=0xaaaac4f80880,
block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at
../../../glib/gmain.c:4212
#3  0x0000ffffae8d0240 in g_main_loop_run (loop=0xaaaac4ecbe20) at
../../../glib/gmain.c:4419
#4  0x0000ffff99be6b50 in fwupd_client_connect (self=0xaaaac4ec3f40
[FwupdClient], cancellable=0xaaaac4ecbf60 [GCancellable], error=0xffffecf49998)
at ../libfwupd/fwupd-client-sync.c:104
#5  0x0000ffff99c5d87c in FwupdBackend::FwupdBackend (this=0xaaaac4ebfa10,
parent=<optimized out>) at
/home/jon/kde/src/discover/libdiscover/backends/FwupdBackend/FwupdBackend.cpp:33
#6  0x0000ffff99c60838 in FwupdBackendFactory::newInstance (this=<optimized
out>, parent=<optimized out>, name=...) at
/home/jon/kde/src/discover/libdiscover/backends/FwupdBackend/FwupdBackend.cpp:24
#7  0x0000ffffb262a300 in DiscoverBackendsFactory::backendForFile
(this=this@entry=0xffffecf49c88, libname=..., name=...) at
/home/jon/kde/src/discover/libdiscover/DiscoverBackendsFactory.cpp:58
#8  0x0000ffffb262a79c in DiscoverBackendsFactory::backend
(this=this@entry=0xffffecf49c88, name=...) at
/home/jon/kde/src/discover/libdiscover/DiscoverBackendsFactory.cpp:44
#9  0x0000ffffb262a9a8 in operator() (name=..., __closure=<synthetic pointer>)
at /home/jon/kde/src/discover/libdiscover/DiscoverBackendsFactory.cpp:96
#10 kTransform<QList<AbstractResourcesBackend*>, QList<QString>,
DiscoverBackendsFactory::allBackends() const::<lambda(const QString&)> >
(op=..., input=...) at /home/jon/kde/src/discover/libdiscover/utils.h:54
#11 DiscoverBackendsFactory::allBackends (this=this@entry=0xffffecf49c88) at
/home/jon/kde/src/discover/libdiscover/DiscoverBackendsFactory.cpp:97
#12 0x0000ffffb25fa83c in ResourcesModel::registerAllBackends
(this=this@entry=0xaaaac4c50ca0) at
/home/jon/kde/src/discover/libdiscover/resources/ResourcesModel.cpp:253
#13 0x0000ffffb25fac14 in ResourcesModel::init (this=this@entry=0xaaaac4c50ca0,
load=load@entry=true) at
/home/jon/kde/src/discover/libdiscover/resources/ResourcesModel.cpp:99
#14 0x0000ffffb25fac6c in ResourcesModel::global () at
/home/jon/kde/src/discover/libdiscover/resources/ResourcesModel.cpp:39
#15 0x0000ffffb25df8f4 in CategoryModel::CategoryModel (this=0xaaaac4e82e70,
parent=<optimized out>) at
/home/jon/kde/src/discover/libdiscover/Category/CategoryModel.cpp:22
#16 0x0000ffffb25dfaec in CategoryModel::global () at
/home/jon/kde/src/discover/libdiscover/Category/CategoryModel.cpp:39
#17 0x0000aaaab0756794 in DiscoverDeclarativePlugin::registerTypes
(this=<optimized out>) at
/home/jon/kde/src/discover/discover/DiscoverDeclarativePlugin.cpp:63
#18 0x0000aaaab074a71c in DiscoverObject::DiscoverObject (this=0xaaaac4f5ec90,
initialProperties=...) at
/home/jon/kde/src/discover/discover/DiscoverObject.cpp:145
#19 0x0000aaaab074049c in main (argc=<optimized out>, argv=<optimized out>) at
/home/jon/kde/src/discover/discover/main.cpp:174
Warning: the current language does not match this frame.
[Inferior 1 (process 72987) detached]

Reported using DrKonqi

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to