Bug 513411 - Dolphin crashes when navigating into remote directory while processing renaming (KCoreDirListerCache::emitRedirections)
Summary: Dolphin crashes when navigating into remote directory while processing renami...
Status: REPORTED
Alias: None
Product: frameworks-kio
Classification: Frameworks and Libraries
Component: general (other bugs)
Version First Reported In: 6.20.0
Platform: Arch Linux Linux
: NOR crash
Target Milestone: ---
Assignee: KIO Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-12-15 16:38 UTC by mydarkstar
Modified: 2025-12-31 06:06 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report: https://crash-reports.kde.org/organizations/kde/issues/273736/events/720b21b810fd433ba2a9726992b02d01/


Attachments
kcrash backtrace 1 (KF 6.20.0, Dolphin 25.08.3) (55.07 KB, text/vnd.kde.kcrash-report)
2025-12-15 16:38 UTC, mydarkstar
Details
kcrash backtrace 2 (KF 6.20.0, Dolphin 25.08.3) (49.17 KB, text/vnd.kde.kcrash-report)
2025-12-15 16:39 UTC, mydarkstar
Details
kcrash backtrace 3 (KF 6.21.0, Dolphin 25.12.0) (70.25 KB, text/vnd.kde.kcrash-report)
2025-12-31 06:01 UTC, mydarkstar
Details

Note You need to log in before you can comment on or make changes to this bug.
Description mydarkstar 2025-12-15 16:38:13 UTC
Created attachment 187674 [details]
kcrash backtrace 1 (KF 6.20.0, Dolphin 25.08.3)

# SUMMARY
If you navigate into a directory on a remote server "quickly" after applying a rename of that directory, Dolphin will crash.

# STEPS TO REPRODUCE
1. Open Dolphin and browse to a remote device (SFTP used here)
2. Rename a directory on remote device ('F2', edit, 'enter' used here)
3. While the rename is still in progress, navigate into said directory directly ('enter' used here)
4. Dolphin aborts with SIGABRT reproducibly

# OBSERVED RESULT
Dolphin aborts with SIGABRT.

Backtrace shows abort() invoked inside KCoreDirListerCache::printDebug after KCoreDirListerCache::updateDirectory and KCoreDirListerCache::emitRedirections were running.

Application emits a log line: "Fatal Error: HUH? Lister KDirLister(...) is supposed to be listing, but has no job!" immediately before abort.

# EXPECTED RESULT
Renaming a remote directory and concurrent navigation should not result in crashes.

# SOFTWARE/OS VERSIONS
Operating System: Arch Linux
Dolphin Version: 25.08.3 
KDE Plasma Version: 6.5.3
KDE Frameworks Version: 6.20.0
Qt Version: 6.10.1
Kernel Version: 6.12.60-1-lts (64-bit)
Graphics Platform: Wayland

# ERROR MESSAGES
(gdb) b /usr/src/debug/kio/kio-6.20.0/src/core/kcoredirlister.cpp:1579
Breakpoint 3 at 0x7428ca472ba0: file /usr/src/debug/kio/kio-6.20.0/src/core/kcoredirlister.cpp, line 1580.
(gdb) run
Starting program: /usr/bin/dolphin
kf.kio.core: The unexpected happened.
kf.kio.core: listers for QUrl("sftp://hostname/path/to/renamed_directory") = QList(KDirLister(0x555555f7d130))
kf.kio.core: job= QObject(0x0)
kf.kio.core: Fatal Error: HUH? Lister KDirLister(0x555555f7d130) is supposed to be listing, but has no job!

Thread 1 "dolphin" received signal SIGABRT, Aborted.
__pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
44            return INTERNAL_SYSCALL_ERROR_P (ret) ? INTERNAL_SYSCALL_ERRNO (ret) : 0;
(gdb) kf.kio.core.connection: Socket not connected QLocalSocket::PeerClosedError
kf.kio.core: An error occurred during write. The worker terminates now.
(gdb)


# BACKTRACE (No. 1)
Thread 1 (Thread 0x7fffed68a680 (LWP 223106)):
[KCrash Handler]
#5  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#6  0x00007ffff4a989d3 in __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:89
#7  0x00007ffff4a3e3a0 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#8  0x00007ffff4a2557a in __GI_abort () at abort.c:77
#9  0x00007ffff78570a4 in KCoreDirListerCache::printDebug (this=<optimized out>) at /usr/src/debug/kio/kio-6.20.0/src/core/kcoredirlister.cpp:2096
#10 0x00007ffff79025d9 in KCoreDirListerCache::updateDirectory (this=this@entry=0x5555557606f0, _dir=...) at /usr/src/debug/kio/kio-6.20.0/src/core/kcoredirlister.cpp:646
#11 0x00007ffff79068db in KCoreDirListerCache::emitRedirections (this=<optimized out>, _oldUrl=..., _newUrl=...) at /usr/src/debug/kio/kio-6.20.0/src/core/kcoredirlister.cpp:1634
#12 KCoreDirListerCache::renameDir (this=0x5555557606f0, oldUrl=..., newUrl=...) at /usr/src/debug/kio/kio-6.20.0/src/core/kcoredirlister.cpp:1584
#13 KCoreDirListerCache::slotFileRenamed (this=0x5555557606f0, _src=..., _dst=..., dstPath=...) at /usr/src/debug/kio/kio-6.20.0/src/core/kcoredirlister.cpp:927
#14 0x00007ffff53d734f in QtPrivate::QSlotObjectBase::call (this=<optimized out>, r=<optimized out>, a=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
#15 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:4257
#16 0x00007ffff79494f5 in QMetaObject::activate<void, QString, QString, QString> (sender=<optimized out>, mo=<optimized out>, local_signal_index=1, ret=0x0) at /usr/include/qt6/QtCore/qobjectdefs.h:319
#17 OrgKdeKDirNotifyInterface::FileRenamedWithLocalPath (this=<optimized out>, _t1=..., _t2=..., _t3=...) at /usr/src/debug/kio/build/src/core/KF6KIOCore_autogen/include/moc_kdirnotify.cpp:186
#18 0x00007ffff7949875 in OrgKdeKDirNotifyInterface::qt_static_metacall (_o=_o@entry=0x555555a31d20, _c=_c@entry=QMetaObject::InvokeMetaMethod, _id=_id@entry=1, _a=_a@entry=0x7fffffffcd08) at /usr/src/debug/kio/build/src/core/KF6KIOCore_autogen/include/moc_kdirnotify.cpp:116
#19 0x00007ffff794e532 in OrgKdeKDirNotifyInterface::qt_metacall (this=0x555555a31d20, _c=QMetaObject::InvokeMetaMethod, _id=1, _a=0x7fffffffcd08) at /usr/src/debug/kio/build/src/core/KF6KIOCore_autogen/include/moc_kdirnotify.cpp:166
#20 0x00007ffff6c8bb71 in QDBusConnectionPrivate::deliverCall (this=0x7fffe80016e0, object=0x555555a31d20, msg=..., metaTypes=..., slotIdx=6) at /usr/src/debug/qt6-base/qtbase/src/dbus/qdbusintegrator.cpp:1008
#21 0x00007ffff53c4994 in QObject::event (this=<optimized out>, e=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:1413
#22 0x00007ffff65021c0 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x555555a31d20, e=0x7fffe803c600) at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:3305
#23 0x00007ffff536a958 in QCoreApplication::notifyInternal2 (receiver=0x555555a31d20, event=event@entry=0x7fffe803c600) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1109
#24 0x00007ffff536ad30 in QCoreApplication::sendEvent (receiver=<optimized out>, event=0x7fffe803c600) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1549
#25 QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x5555556dab50) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1904
#26 0x00007ffff564ae18 in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1757
#27 postEventSourceDispatch (s=0x5555556e2870) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:246
#28 0x00007ffff1facf8d in g_main_dispatch (context=0x7fffe8000f60) at ../glib/glib/gmain.c:3565
#29 0x00007ffff1fae657 in g_main_context_dispatch_unlocked (context=0x7fffe8000f60) at ../glib/glib/gmain.c:4425
#30 g_main_context_iterate_unlocked (context=context@entry=0x7fffe8000f60, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4490
#31 0x00007ffff1fae865 in g_main_context_iteration (context=0x7fffe8000f60, may_block=1) at ../glib/glib/gmain.c:4556
#32 0x00007ffff5648152 in QEventDispatcherGlib::processEvents (this=0x5555556e3a60, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:399
#33 0x00007ffff5375786 in QEventLoop::processEvents (this=0x7fffffffd370, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:104
#34 QEventLoop::exec (this=0x7fffffffd370, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:186
#35 0x00007ffff536f3f1 in QCoreApplication::exec () at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1452
#36 0x00007ffff64fd32a in QApplication::exec () at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:2575
#37 0x00005555555a3c7f in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/dolphin/dolphin-25.08.3/src/main.cpp:272


# EXCERPT OF FULL BACKTRACE
#0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
        tid = <optimized out>
        ret = 0
        pd = <optimized out>
        old_mask = {__val = {14}}
        ret = <optimized out>
#1  0x00007ffff4a989d3 in __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:89
No locals.
#2  0x00007ffff4a3e3a0 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
        ret = <optimized out>
#3  0x00007ffff4a2557a in __GI_abort () at abort.c:77
        act = {__sigaction_handler = {sa_handler = 0x555556339570, sa_sigaction = 0x555556339570}, sa_mask = {__val = {93825006802288, 140737488340000, 140737308166117, 93824996733592, 93825006495560, 9147936743080992, 5160890786668905728, 140737488340288, 140737488340288, 140737488340080, 140737346121280, 93824993860192, 93824993860208, 42, 5160890786668905728, 93825002885424}}, sa_flags = -1342405376, sa_restorer = 0x555555ff20e0}
#4  0x00007ffff78570a4 in KCoreDirListerCache::printDebug (this=<optimized out>) at /usr/src/debug/kio/kio-6.20.0/src/core/kcoredirlister.cpp:2096
        listit = 0x555555f7d130
        __for_range = @0x7fffffffc520: {<QListSpecialMethods<KCoreDirLister*>> = {<QListSpecialMethodsBase<KCoreDirLister*>> = {<No data fields>}, <No data fields>}, d = {d = 0x55555634e030, ptr = 0x55555634e040, size = 1}}
        __for_begin = <optimized out>
        __for_end = <optimized out>
        itu = <optimized out>
        ituend = <optimized out>
        listersWithoutJob = {<QListSpecialMethods<KCoreDirLister*>> = {<QListSpecialMethodsBase<KCoreDirLister*>> = {<No data fields>}, <No data fields>}, d = {d = 0x55555634e030, ptr = 0x55555634e040, size = 1}}
        dit = <optimized out>
        jit = <optimized out>
        cachedDirs = {<QListSpecialMethods<QUrl>> = {<QListSpecialMethodsBase<QUrl>> = {<No data fields>}, <No data fields>}, d = {d = 0x5555562ee6f0, ptr = 0x5555562ee700, size = 9}}
#5  0x00007ffff79025d9 in KCoreDirListerCache::updateDirectory (this=this@entry=0x5555557606f0, _dir=...) at /usr/src/debug/kio/kio-6.20.0/src/core/kcoredirlister.cpp:646
        dir = {d = 0x55555647fc00}
        dirData = <optimized out>
        listers = {<QListSpecialMethods<KCoreDirLister*>> = {<QListSpecialMethodsBase<KCoreDirLister*>> = {<No data fields>}, <No data fields>}, d = {d = 0x5555564a6270, ptr = 0x5555564a6280, size = 1}}
        holders = {<QListSpecialMethods<KCoreDirLister*>> = {<QListSpecialMethodsBase<KCoreDirLister*>> = {<No data fields>}, <No data fields>}, d = {d = 0x0, ptr = 0x0, size = 0}}
        killed = <optimized out>
        job = 0x0
        requestFromListers = <optimized out>
        requestFromholders = <optimized out>
#6  0x00007ffff79068db in KCoreDirListerCache::emitRedirections (this=<optimized out>, _oldUrl=..., _newUrl=...) at /usr/src/debug/kio/kio-6.20.0/src/core/kcoredirlister.cpp:1634
        oldUrl = {d = 0x555556536340}
        newUrl = {d = 0x5555563b7590}
        job = <optimized out>
        dit = <optimized out>
        listers = {<QListSpecialMethods<KCoreDirLister*>> = {<QListSpecialMethodsBase<KCoreDirLister*>> = {<No data fields>}, <No data fields>}, d = {d = 0x555556533890, ptr = 0x5555565338a0, size = 1}}
        holders = {<QListSpecialMethods<KCoreDirLister*>> = {<QListSpecialMethodsBase<KCoreDirLister*>> = {<No data fields>}, <No data fields>}, d = {d = 0x0, ptr = 0x0, size = 0}}
        newDirData = @0x555555a50cb8: {m_listerContainer = std::unordered_map with 1 element = {[0x555555f7d130] = ListerStatus::Listing}}
#7  KCoreDirListerCache::renameDir (this=0x5555557606f0, oldUrl=..., newUrl=...) at /usr/src/debug/kio/kio-6.20.0/src/core/kcoredirlister.cpp:1584
        i = @0x555556535d70: {oldUrl = {d = 0x555556533350}, newUrl = {d = 0x5555564ac840}, dirItem = 0x555556530990}
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        itemsToChange = <optimized out>
        listers = std::set with 0 elements
Comment 1 mydarkstar 2025-12-15 16:39:07 UTC
Created attachment 187675 [details]
kcrash backtrace 2 (KF 6.20.0, Dolphin 25.08.3)
Comment 2 mydarkstar 2025-12-31 06:01:29 UTC
Created attachment 188105 [details]
kcrash backtrace 3 (KF 6.21.0, Dolphin 25.12.0)

This continues to be easily reproducible on:

Operating System: Arch Linux
KDE Plasma Version: 6.5.4
KDE Frameworks Version: 6.21.0 ←
Dolphin Version: 25.12.0 ←
Qt Version: 6.10.1
Kernel Version: 6.12.63-1-lts (64-bit)
Graphics Platform: Wayland