#1135947 nheko: [aarch64] Crash at startup, around QtPipeWire::SpaObjectAudioFormat

Package:
nheko
Source:
nheko
Description:
desktop IM client for the Matrix protocol
Submitter:
Dr. David Alan Gilbert
Date:
2026-05-12 05:23:01 UTC
Severity:
normal
#1135947#5
Date:
2026-05-07 13:37:05 UTC
From:
To:
It crashes at startup, after having previously succesfully logged into
my Matrix account on a previous session.
It's a reliable crash.
This is on a newly debootstrapped aarch64 machine.

Gdb points to something around QtPipeWire:

Thread 1 "nheko" received signal SIGSEGV, Segmentation fault.
QFutureInterface<std::optional<QtPipeWire::SpaObjectAudioFormat> >::resultReference (index=0, this=0xffffffffdf68)
    at /usr/include/aarch64-linux-gnu/qt6/QtCore/qfutureinterface.h:415
⚠️ warning: 415	/usr/include/aarch64-linux-gnu/qt6/QtCore/qfutureinterface.h: No such file or directory
(gdb) where
#0  QFutureInterface<std::optional<QtPipeWire::SpaObjectAudioFormat> >::resultReference (index=0, this=0xffffffffdf68)
    at /usr/include/aarch64-linux-gnu/qt6/QtCore/qfutureinterface.h:415
#1  QFuture<std::optional<QtPipeWire::SpaObjectAudioFormat> >::result<std::optional<QtPipeWire::SpaObjectAudioFormat>, void> (this=0xffffffffdf68)
    at /usr/include/aarch64-linux-gnu/qt6/QtCore/qfuture.h:314
#2  QtPrivate::CompactContinuation<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)>, void, std::optional<QtPipeWire::SpaObjectAudioFormat> >::fulfillVoidPromise (this=0xffffffffdf50)
    at /usr/include/aarch64-linux-gnu/qt6/QtCore/qfuture_impl.h:630
#3  QtPrivate::CompactContinuation<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)>, void, std::optional<QtPipeWire::SpaObjectAudioFormat> >::runFunction (
    this=0xffffffffdf50)
    at /usr/include/aarch64-linux-gnu/qt6/QtCore/qfuture_impl.h:437
--Type <RET> for more, q to quit, c to continue without paging--
#4  QtPrivate::CompactContinuation<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)>, void, std::optional<QtPipeWire::SpaObjectAudioFormat> >::runImpl (
    this=0xffffffffdf50)
    at /usr/include/aarch64-linux-gnu/qt6/QtCore/qfuture_impl.h:349
#5  QtPrivate::CompactContinuation<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)>, void, std::optional<QtPipeWire::SpaObjectAudioFormat> >::execute (
    this=0xffffffffdf50)
    at /usr/include/aarch64-linux-gnu/qt6/QtCore/qfuture_impl.h:482
#6  operator() (__closure=<optimized out>)
    at /usr/include/aarch64-linux-gnu/qt6/QtCore/qfuture_impl.h:607
#7  QtPrivate::ContinuationWrapper<QtPrivate::CompactContinuation<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<--Type <RET> for more, q to quit, c to continue without paging--
QtPipeWire::SpaObjectAudioFormat>&)>, void, std::optional<QtPipeWire::SpaObjectAudioFormat> >::create<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)> >(QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)>&&, QFuture<std::optional<QtPipeWire::SpaObjectAudioFormat> >*, QFutureInterface<void>&, QObject*)::<lambda()> >::operator()<> (this=<optimized out>)
    at /usr/include/aarch64-linux-gnu/qt6/QtCore/qfuture_impl.h:504
#8  std::__invoke_impl<void, QtPrivate::ContinuationWrapper<QtPrivate::CompactContinuation<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)>, void, std::optional<QtPipeWire::SpaObjectAudioFormat> >::create<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDevic--Type <RET> for more, q to quit, c to continue without paging--
eMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)> >(QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)>&&, QFuture<std::optional<QtPipeWire::SpaObjectAudioFormat> >*, QFutureInterface<void>&, QObject*)::<lambda()> >&> (__f=...) at /usr/include/c++/15/bits/invoke.h:63
#9  std::__invoke_r<void, QtPrivate::ContinuationWrapper<QtPrivate::CompactContinuation<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)>, void, std::optional<QtPipeWire::SpaObjectAudioFormat> >::create<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)> >(QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)>&&, QFuture<--Type <RET> for more, q to quit, c to continue without paging--
std::optional<QtPipeWire::SpaObjectAudioFormat> >*, QFutureInterface<void>&, QObject*)::<lambda()> >&> (__fn=...) at /usr/include/c++/15/bits/invoke.h:113
#10 std::_Function_handler<void(), QtPrivate::ContinuationWrapper<QtPrivate::CompactContinuation<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)>, void, std::optional<QtPipeWire::SpaObjectAudioFormat> >::create<QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)> >(QtPipeWire::QAudioDeviceMonitor::objectAdded(QtPipeWire::ObjectId, uint32_t, QtPipeWire::PipewireRegistryType, uint32_t, const spa_dict&)::<lambda(std::__cxx11::list<QtPipeWire::QAudioDeviceMonitor::PendingNodeRecord>&)>::<lambda(const std::optional<QtPipeWire::SpaObjectAudioFormat>&)>&&, QFuture<std::optional<QtPipeWire::SpaObjectAudioFormat> >*, QFutureInterface<void>&, QObject*)::<lambda()> > >::_M_invoke(const std::_Any_data &) (
    __functor=...) at /usr/include/c++/15/bits/std_function.h:292
#11 0x0000fffff505f71c [PAC] in QtPrivate::QSlotObjectBase::call (
    this=<optimized out>, r=0x0, a=0xffffffffe070)
--Type <RET> for more, q to quit, c to continue without paging--
    at ./src/corelib/kernel/qobjectdefs_impl.h:461
#12 operator() (__closure=<optimized out>)
    at ./src/corelib/compat/removed_api.cpp:1443
#13 operator() (__closure=<optimized out>)
    at ./src/corelib/kernel/qobjectdefs_impl.h:116
#14 QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<long unsigned int>, QtPrivate::List<>, void, QFutureInterfaceBase::setContinuation(const QObject*, std::function<void()>, const QVariant&, ContinuationType)::<lambda()> >::call(QFutureInterfaceBase::setContinuation(const QObject*, std::function<void()>, const QVariant&, ContinuationType)::<lambda()>&, void**)::<lambda()> > (args=<optimized out>, fn=...)
    at ./src/corelib/kernel/qobjectdefs_impl.h:65
#15 QtPrivate::FunctorCall<std::integer_sequence<long unsigned int>, QtPrivate::List<>, void, QFutureInterfaceBase::setContinuation(const QObject*, std::function<void()>, const QVariant&, ContinuationType)::<lambda()> >::call (f=...,
    arg=<optimized out>) at ./src/corelib/kernel/qobjectdefs_impl.h:115
#16 QtPrivate::FunctorCallable<QFutureInterfaceBase::setContinuation(const QObject*, std::function<void()>, const QVariant&, ContinuationType)::<lambda()> >::call<QtPrivate::List<>, void> (f=..., arg=<optimized out>)
    at ./src/corelib/kernel/qobjectdefs_impl.h:337
--Type <RET> for more, q to quit, c to continue without paging--
#17 QtPrivate::QCallableObject<QFutureInterfaceBase::setContinuation(const QObject*, std::function<void()>, const QVariant&, ContinuationType)::<lambda()>, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=<optimized out>,
    r=<optimized out>, a=<optimized out>, ret=<optimized out>)
    at ./src/corelib/kernel/qobjectdefs_impl.h:547
#18 0x0000fffff4f2baec [PAC] in QObject::event (this=<optimized out>,
    e=<optimized out>) at ./src/corelib/kernel/qobject.cpp:1413
#19 0x0000fffff7939f00 [PAC] in QApplicationPrivate::notify_helper (
    this=<optimized out>, receiver=0xaaaaac690fa8, e=0xffff900074a0)
    at ./src/widgets/kernel/qapplication.cpp:3305
#20 0x0000fffff4edec30 [PAC] in QCoreApplication::notifyInternal2 (
    receiver=receiver@entry=0xaaaaac690fa8, event=event@entry=0xffff900074a0)
    at ./src/corelib/kernel/qcoreapplication.cpp:1109
#21 0x0000fffff4edec90 [PAC] in QCoreApplication::sendEvent (
    receiver=receiver@entry=0xaaaaac690fa8, event=event@entry=0xffff900074a0)
    at ./src/corelib/kernel/qcoreapplication.cpp:1549
#22 0x0000fffff4edef30 in QCoreApplicationPrivate::sendPostedEvents (
    receiver=0x0, event_type=0, data=0xaaaaac1f6ef0)
    at ./src/corelib/kernel/qcoreapplication.cpp:1904
--Type <RET> for more, q to quit, c to continue without paging--
#23 0x0000fffff514d0f0 [PAC] in postEventSourceDispatch (s=0xaaaaac1f9100)
    at ./src/corelib/kernel/qeventdispatcher_glib.cpp:246
#24 0x0000fffff48ccd98 [PAC] in g_main_dispatch (
    context=context@entry=0xffffe8000f60) at ../../../glib/gmain.c:3591
#25 0x0000fffff48d0344 [PAC] in g_main_context_dispatch_unlocked (
    context=0xffffe8000f60) at ../../../glib/gmain.c:4451
#26 g_main_context_iterate_unlocked (context=context@entry=0xffffe8000f60,
    block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at ../../../glib/gmain.c:4516
#27 0x0000fffff48d0bc8 [PAC] in g_main_context_iteration (
    context=0xffffe8000f60, may_block=1) at ../../../glib/gmain.c:4582
#28 0x0000fffff514aaa8 [PAC] in QEventDispatcherGlib::processEvents (
    this=0xaaaaac1ba3a0, flags=...)
    at ./src/corelib/kernel/qeventdispatcher_glib.cpp:399
#29 0x0000fffff4ee74c4 [PAC] in QEventLoop::exec (this=0xffffffffe500,
    flags=...) at ./src/corelib/global/qflags.h:77
#30 0x0000fffff4ee1d54 [PAC] in QCoreApplication::exec ()
    at ./src/corelib/kernel/qcoreapplication.cpp:1452
#31 0x0000fffff55fa6b0 [PAC] in QGuiApplication::exec ()
    at ./src/gui/kernel/qguiapplication.cpp:1977
#32 0x0000fffff79358a8 in QApplication::exec ()
    at ./src/widgets/kernel/qapplication.cpp:2575
#33 0x0000aaaaab41a6fc in main (argc=<optimized out>, argv=<optimized out>)
    at ./src/main.cpp:481

#1135947#10
Date:
2026-05-07 14:37:01 UTC
From:
To:
I've got Nheko working by going into the KDE sound settings, and changing
the audio output device and testing it, and now nheko starts fine.
Changing it back to the original setting and it still works.
Hmm; maybe this is a crash when no one has set it at all?

Dave

#1135947#15
Date:
2026-05-12 05:20:56 UTC
From:
To:
Hi Dave,

Quoting Dr. David Alan Gilbert (2026-05-07 16:37:01)

Thanks for reporting this issue, and happy that you found a workaround.

This issue is unlikely to be caused by Debian-specific changes, and it
would be quite helpful if you could report the issue directly upstream
and share here a link to that other report here if you choose to do so.

Kind regards,

 - Jonas

P.S. I kinda like your "small corker of the web". Personally I prefer
my blanket-wrapped working space to be on a couch rather than reaching
into a bookshelf, but hey, whatever works for you :-)