https://bugs.kde.org/show_bug.cgi?id=521822
Bug ID: 521822
Summary: kdeconnectd 100% CPU freeze in KFilePlacesModel::url
via kdeconnect_sftp on device disconnect
Classification: Applications
Product: kdeconnect
Version First 26.04.2
Reported In:
Platform: Neon
OS: Linux
Status: REPORTED
Severity: grave
Priority: NOR
Component: common
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected]
Target Milestone: ---
Since updating to Plasma 6.7 on KDE neon, kdeconnectd continuously spikes to
100% CPU usage across multiple reboots.
After attaching GDB with debuginfod symbols, it appears that when a device
disconnects (LanDeviceLink destruction), the SftpPlugin tries to clean up its
Dolphin integration, triggering an infinite loop or deadlock between
KFilePlacesModel data querying and Qt6's QUrl/ACE host processing.
STEPS TO REPRODUCE:
1. Have an active SFTP connection to a paired device.
2. Put the laptop into sleep mode (suspend to RAM).
3. Wake the laptop up.
4. kdeconnectd immediately locks up at 100% CPU.
OBSERVED RESULT:
kdeconnectd hangs indefinitely in a loop trying to process QUrl::setHost during
SftpPlugin::~SftpPlugin().
EXPECTED RESULT:
SftpPlugin cleans up cleanly from KFilePlacesModel without locking up Qt's
event loop.
SOFTWARE/OS VERSIONS:
Linux/KDE neon (Plasma 6.7, Qt 6)
GDB BACKTRACE:
<https://debuginfod.ubuntu.com>
Enable debuginfod for this session? (y or [n]) y
Debuginfod has been enabled.
To make this setting permanent, add 'set debuginfod enabled on' to .gdbinit.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007e679dd02884 in ?? () from /lib/x86_64-linux-gnu/libQt6Core.so.6
(gdb) bt
#0 0x00007e679dd02884 in ??? () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#1 0x00007e679dd08b68 in qt_ACE_do(QString const&, AceOperation,
AceLeadingDot, QFlags<QUrl::AceProcessingOption>) ()
at /lib/x86_64-linux-gnu/libQt6Core.so.6
#2 0x00007e679dcfbf57 in ??? () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#3 0x00007e679dd03e2c in QUrl::setHost(QString const&, QUrl::ParsingMode) ()
at /lib/x86_64-linux-gnu/libQt6Core.so.6
#4 0x00007e67962ebc50 in ??? () at
/lib/x86_64-linux-gnu/libKF6KIOFileWidgets.so.6
#5 0x00007e67962eabcc in ??? () at
/lib/x86_64-linux-gnu/libKF6KIOFileWidgets.so.6
#6 0x00007e67962fd2c7 in KFilePlacesModel::data(QModelIndex const&, int) const
() at /lib/x86_64-linux-gnu/libKF6KIOFileWidgets.so.6
#7 0x00007e67962fc9b8 in KFilePlacesModel::url(QModelIndex const&) const () at
/lib/x86_64-linux-gnu/libKF6KIOFileWidgets.so.6
#8 0x00007e6794180d32 in SftpPlugin::removeFromDolphin (this=0x59bedc81bb50)
at /workspace/build/plugins/sftp/sftpplugin.cpp:55
#9 0x00007e679418077a in SftpPlugin::~SftpPlugin (this=0x59bedc81bb50,
__in_chrg=<optimized out>) at /workspace/build/plugins/sftp/sftpplugin.cpp:37
#10 0x00007e67941807f2 in SftpPlugin::~SftpPlugin (this=0x59bedc81bb50,
__in_chrg=<optimized out>) at /workspace/build/plugins/sftp/sftpplugin.cpp:39
#11 0x00007e679fc2607d in qDeleteAll<QHash<QString,
KdeConnectPlugin*>::const_iterator> (begin=..., end=...)
at /usr/include/x86_64-linux-gnu/qt6/QtCore/qalgorithms.h:25
#12 0x00007e679fc23acc in qDeleteAll<QHash<QString, KdeConnectPlugin*> >
(c=...) at /usr/include/x86_64-linux-gnu/qt6/QtCore/qalgorithms.h:33
#13 0x00007e679fc1d6f5 in Device::reloadPlugins (this=0x59bedc731810) at
/workspace/build/core/device.cpp:193
#14 0x00007e679fc1e985 in Device::removeLink (this=0x59bedc731810,
link=0x59bedc79f6c0) at /workspace/build/core/device.cpp:349
#15 0x00007e679fc1e92f in Device::linkDestroyed (this=0x59bedc731810,
o=0x59bedc79f6c0) at /workspace/build/core/device.cpp:339
#16 0x00007e679fc2e73d in QtPrivate::FunctorCall<std::integer_sequence<unsigned
long, 0ul>, QtPrivate::List<QObject*>, void, void
(Device::*)(QObject*)>::call(void (Device::*)(QObject*), Device*,
void**)::{lambda()#1}::operator()() const (__closure=0x7ffe9c6c3a30)
at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:128
#17 0x00007e679fc2f100 in QtPrivate::FunctorCallBase::call_internal<void,
QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>,
QtPrivate::List<QObject*>, void, void (Device::*)(QObject*)>::call(void
(Device::*)(QObject*), Device*, void**)::{lambda()#1}>(void**,
QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>,
QtPrivate::List<QObject*>, void, void (Device::*)(QObject*)>::call(void
(Device::*)(QObject*), Device*, void**)::{lambda()#1}&&) (args=0x7ffe9c6c3bd0,
fn=...) at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:66
#18 0x00007e679fc2e7b1 in QtPrivate::FunctorCall<std::integer_sequence<unsigned
long, 0ul>, QtPrivate::List<QObject*>, void, void (Device::*)(QObject*)>::call
(f=(void (Device::*)(class Device * const, class QObject *)) 0x7e679fc1e908
<Device::linkDestroyed(QObject*)>, o=0x59bedc731810, arg=0x7ffe9c6c3bd0)
at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:127
#19 0x00007e679fc2d856 in QtPrivate::FunctionPointer<void
(Device::*)(QObject*)>::call<QtPrivate::List<QObject*>, void>
(f=(void (Device::*)(class Device * const, class QObject *)) 0x7e679fc1e908
<Device::linkDestroyed(QObject*)>, o=0x59bedc731810, arg=0x7ffe9c6c3bd0)
at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:175
#20 0x00007e679fc2af85 in QtPrivate::QCallableObject<void
(Device::*)(QObject*), QtPrivate::List<QObject*>, void>::impl
(which=1, this_=0x59bedc7d7190, r=0x59bedc731810, a=0x7ffe9c6c3bd0,
ret=0x0) at /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:546
#21 0x00007e679dcd8f1d in ??? () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#22 0x00007e679dc82f13 in QObject::destroyed(QObject*) () at
/lib/x86_64-linux-gnu/libQt6Core.so.6
#23 0x00007e679dc74432 in QObject::~QObject() () at
/lib/x86_64-linux-gnu/libQt6Core.so.6
#24 0x00007e679fb9f5a2 in DeviceLink::~DeviceLink (this=0x59bedc79f6c0,
__in_chrg=<optimized out>) at /workspace/build/core/backends/devicelink.h:17
#25 0x00007e679fb9f696 in LanDeviceLink::~LanDeviceLink (this=0x59bedc79f6c0,
__in_chrg=<optimized out>)
at /workspace/build/core/backends/lan/landevicelink.h:23
#26 0x00007e679fb9f6b6 in LanDeviceLink::~LanDeviceLink (this=0x59bedc79f6c0,
__in_chrg=<optimized out>)
at /workspace/build/core/backends/lan/landevicelink.h:23
#27 0x00007e679dc755ac in QObject::event(QEvent*) () at
/lib/x86_64-linux-gnu/libQt6Core.so.6
#28 0x00007e679f07586a in QApplicationPrivate::notify_helper(QObject*, QEvent*)
() at /lib/x86_64-linux-gnu/libQt6Widgets.so.6
#29 0x00007e679dd19778 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
() at /lib/x86_64-linux-gnu/libQt6Core.so.6
#30 0x00007e679dd19a1a in QCoreApplicationPrivate::sendPostedEvents(QObject*,
int, QThreadData*) () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#31 0x00007e679daf1107 in ??? () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#32 0x00007e679b3d7585 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#33 0x00007e679b436977 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
--
You are receiving this mail because:
You are watching all bug changes.