Bug 506713

Summary: xdg-desktop-portal-kde crashes on startup, causing freeze after closing file dialogs on Plasma 6.4.2
Product: [Plasma] xdg-desktop-portal-kde Reporter: POPO <sean.mc.polin>
Component: generalAssignee: Plasma Bugs List <plasma-bugs-null>
Status: RESOLVED UPSTREAM    
Severity: crash CC: aleixpol, sitter
Priority: NOR    
Version First Reported In: 6.4.2   
Target Milestone: ---   
Platform: Arch Linux   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description POPO 2025-07-07 11:21:29 UTC
SUMMARY
xdg-desktop-portal-kde crashes on startup, causing apps to freeze briefly (~0.5–10s) when closing file dialogs.

STEPS TO REPRODUCE
1. Open any application that uses the Qt/KDE file dialog (e.g. Dolphin, Kate, Gwenview).
2. Trigger a file dialog (e.g. File → Open).
3. Close the dialog with or without selecting anything.

OBSERVED RESULT
The application freezes for a short period (initially 5–10 seconds, now ~0.5s after a workaround) after the file dialog closes.
This corresponds to a timeout caused by xdg-desktop-portal-kde failing to respond on D-Bus due to crashing on startup.

Logs show:

pgsql
Copier
Modifier
qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized.
xdg-desktop-portal-kde.service: Failed with result 'core-dump'

EXPECTED RESULT
The file dialog closes immediately and the application remains responsive, without freezing.


SOFTWARE/OS VERSIONS
Operating System: EndeavourOS
KDE Plasma Version: 6.4.2
KDE Frameworks Version: 6.15.0
Qt Version: 6.9.1
Kernel Version: 6.15.5-zen1-1-zen (64-bit)
Graphics Platform: Wayland
Display Manager: SDDM

xdg-desktop-portal: 1.20.3-1
xdg-desktop-portal-kde: 6.4.2-1
xcb-util-cursor: installed
xdg-desktop-portal-gtk: not installed

ADDITIONAL INFORMATION
As a workaround, I created a user-level systemd service to manually start the portal:

# ~/.config/systemd/user/xdg-desktop-portal-kde.service
[Unit]
Description=xdg-desktop-portal backend for KDE
After=xdg-desktop-portal.service
PartOf=xdg-desktop-portal.service

[Service]
ExecStart=/usr/lib/xdg-desktop-portal-kde
Restart=on-failure
Environment=QT_QPA_PLATFORM=xcb
Environment=DISPLAY=:0
Environment=XDG_CURRENT_DESKTOP=KDE

[Install]
WantedBy=default.target
This reduced the freeze time from ~10s to ~0.5s, confirming that the backend is involved. However, the service still fails with a core dump on startup.

This bug appears distinct from Bug 506266, which was GTK-related. My setup does not include the GTK portal, and the crash is confirmed to originate from xdg-desktop-portal-kde.

This report and troubleshooting were assisted by ChatGPT to ensure clarity and accuracy.
Happy to provide a backtrace or coredump if needed.
Comment 1 Harald Sitter 2025-07-07 15:30:00 UTC
If something crashed, we need a backtrace of it so we can figure out what's going on. Can you please attach a backtrace of the crash using the coredumpctl command-line program, as detailed in https://community.kde.org/Guidelines_and_HOWTOs/Debugging/How_to_create_useful_crash_reports#Retrieving_a_backtrace_using_coredumpctl?
Thanks!
Comment 2 POPO 2025-07-07 16:44:15 UTC
(In reply to Harald Sitter from comment #1)
> If something crashed, we need a backtrace of it so we can figure out what's
> going on. Can you please attach a backtrace of the crash using the
> coredumpctl command-line program, as detailed in
> https://community.kde.org/Guidelines_and_HOWTOs/Debugging/
> How_to_create_useful_crash_reports#Retrieving_a_backtrace_using_coredumpctl?
> Thanks!

Here is the full backtrace obtained via `coredumpctl gdb` for the crash of `xdg-desktop-portal-kde`:

#0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1 0x00007f59934a7813 in __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:89
#2 0x00007f599344ddc0 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3 0x00007f599343557a in __GI_abort () at abort.c:73
#4 0x00007f5993a91217 in qAbort () at /usr/src/debug/qt6-base/qtbase/src/corelib/global/qassert.cpp:46
#5 qt_message_fatal<QString&> (context=..., message=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/global/qlogging.cpp:2149
#6 qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *) (msgType=QtFatalMsg, context=..., msg="%s", ...) at qlogging.cpp:381
#7 0x00007f5993a920ec in QMessageLogger::fatal (this=..., msg="%s") at qlogging.cpp:883
#8 0x00007f59942e215a in init_platform(...) at qguiapplication.cpp:1345
#9 QGuiApplicationPrivate::createPlatformIntegration(...) at qguiapplication.cpp:1591
#10 0x00007f5994398438 in QGuiApplicationPrivate::createEventDispatcher(...) at qguiapplication.cpp:1610
#11 0x00007f5993b6c0f5 in QCoreApplicationPrivate::init(...) at qcoreapplication.cpp:866
#12 0x00007f59943984ce in QGuiApplicationPrivate::init(...) at qguiapplication.cpp:1638
#13 0x00007f5994cfa766 in QApplicationPrivate::init(...) at qapplication.cpp:476
#14 0x00007f5994cfa8b3 in QApplication::QApplication(...) at qapplication.cpp:464
#15 0x000055e4ba570bc7 in main(...) at xdg-desktop-portal-kde.cpp:32

Let me know if you need any further information or if you'd like me to try a debug build.
Comment 3 Harald Sitter 2025-07-07 17:04:37 UTC
That is with your ~/.config/systemd/user/xdg-desktop-portal-kde.service file?
Comment 4 POPO 2025-07-07 18:21:42 UTC
(In reply to Harald Sitter from comment #3)
> That is with your ~/.config/systemd/user/xdg-desktop-portal-kde.service file?

Hi Harald,


The crash effectively was happening with a ~/.config/systemd/user/xdg-desktop-portal-kde.service override in place.

After removing the override and restarting the session, there are no more crashes via coredumpctl.

However, the freeze still occurs when closing a file dialog, whether or not a file was selected.

This behavior is reproducible consistently on my system.
Comment 5 POPO 2025-07-07 18:36:49 UTC
Additional info (assisted by ChatGPT):

We removed the override file as requested and re-tested using the default systemd user unit. However, when the application freezes (after closing a file dialog), it does not leave a coredump or recoverable trace when run through systemd normally.

Since the freeze doesn’t crash the process in a way systemd logs, we tried reproducing it manually by launching xdg-desktop-portal-kde directly under strace, outside of systemd, just to observe whether it hits a fatal condition.

Here is the end of the trace (run without the override):

...
write(4, "\1\0\0\0\0\0\0\0", 8)         = 8
futex(0x55c5d6a2e2e8, FUTEX_WAKE_PRIVATE, 1) = 1
...
exit_group(1)                           = ?
+++ exited with 1 +++
This confirms that the process exits with code 1, consistent with the earlier GDB trace captured with coredumpctl (when the override was still in place), where QMessageLogger::fatal() is reached during init_platform() in Qt.

Let me know if there's a recommended way to trigger a proper coredump in this context, or another diagnostic method you’d like me to try.
Comment 6 Harald Sitter 2025-07-08 05:55:03 UTC
Let's start with keeping the service file removed. It does no good. That crash isn't really a crash it's just Qt saying the environment is incorrect.

Once that is done you can try to reproduce the freeze again. Once you have the freeze you can quickly run this command:

killall -ABRT xdg-desktop-portal-kde

it should end up "fake" crashing our portal UI and give us a look at what it was stuck on. Copy the developer information from the crash dialog into this bug report.
Comment 7 POPO 2025-07-08 10:01:21 UTC
I reproduced the freeze and ran killall -ABRT xdg-desktop-portal-kde as instructed.

I also confirm that I deleted the ~/.config/systemd/user/xdg-desktop-portal-kde.service file we had previously created — the override is no longer present.

Here’s the backtrace from coredumpctl gdb:

#0  __syscall_cancel_arch () at ../sysdeps/unix/sysv/linux/x86_64/syscall_cancel.S:56  
#1  0x00007f5bdd8a1fda in __internal_syscall_cancel (...)  
#2  0x00007f5bdd8a2024 in __syscall_cancel (...)  
#3  0x00007f5bdd91c5a6 in __GI_ppoll (...)  
#4  0x00007f5bdc309e04 in ppoll (...)  
#5  g_main_context_poll_unlocked (...)  
#6  g_main_context_iterate_unlocked (...)  
#7  0x00007f5bdc309ee5 in g_main_context_iteration (...)  
#8  0x00007f5bde23c5e2 in QEventDispatcherGlib::processEvents (...)  
#9  0x00007f5bddf744b6 in QEventLoop::processEvents (...)  
#10 QEventLoop::exec (...)  
#11 0x00007f5bddf6c7c1 in QCoreApplication::exec (...)  
#12 0x00007f5bdf0fc6aa in QApplication::exec (...)  
#13 0x000055bc7f91bff7 in main (...) at xdg-desktop-portal-kde.cpp:68

Let me know if you’d like the full backtrace with all threads.
Comment 8 Harald Sitter 2025-07-08 10:04:09 UTC
We always like full backtraces :D

That said, in this case it seems useless. According to the trace the process wasn't busy doing anything.

Do you see anything logged in journalctl when the freeze happens?
Comment 9 POPO 2025-07-08 11:29:21 UTC
(In reply to Harald Sitter from comment #8)
> We always like full backtraces :D
> 
> That said, in this case it seems useless. According to the trace the process
> wasn't busy doing anything.
> 
> Do you see anything logged in journalctl when the freeze happens?

journalctl output from just after the freeze:

juil. 08 12:09:18 sean-laptop plasmashell[1210]: qrc:/qt/qml/org/kde/plasma/private/clipboard/UrlItemDelegate.qml:49:17: TypeError: Cannot read property 'height' of null
juil. 08 12:10:14 sean-laptop konsole[2941]: kf.windowsystem: static int KX11Extras::currentDesktop() may only be used on X11
juil. 08 12:10:19 sean-laptop konsole[4164]: QLayout: Cannot add a null widget to QHBoxLayout/
juil. 08 12:10:25 sean-laptop systemd[968]: plasma-xdg-desktop-portal-kde.service: Main process exited, code=dumped, status=6/ABRT
juil. 08 12:10:25 sean-laptop systemd[968]: plasma-xdg-desktop-portal-kde.service: Failed with result 'core-dump'.
juil. 08 12:10:26 sean-laptop systemd[968]: Started Xdg Desktop Portal For KDE.
There were no relevant errors logged immediately at the moment of freeze—just routine QML warnings and unrelated Akonadi/Plasma messages.

Let me know what you'd like me to try next. Thanks!
Comment 10 Harald Sitter 2025-07-08 11:49:18 UTC
I guess what we can try is:

- install https://flathub.org/apps/org.freedesktop.Bustle
- start it
- record the session bus (top left button)
- trigger the freeze
- wait for the freeze to end
- in bustle hit the stop button
- save the log as pcap (ctrl+s shortcut)
- send the pcap to sitter@kde.org (it may contain sensitive information -- it's a recording of all inter process communication)
Comment 11 Harald Sitter 2025-07-09 05:45:42 UTC
I just realized that xdg-desktop-portal-kde shouldn't be involved here.

please post the output of the command

> env

and then start kate, freeze it, and trigger a crash while it is frozen

> killall -ABRT kate

please post the developer information from that crash as well.
Comment 12 POPO 2025-07-09 08:52:49 UTC
(In reply to Harald Sitter from comment #11)
> I just realized that xdg-desktop-portal-kde shouldn't be involved here.
> 
> please post the output of the command
> 
> > env
> 
> and then start kate, freeze it, and trigger a crash while it is frozen
> 
> > killall -ABRT kate
> 
> please post the developer information from that crash as well.

Here is env : 

SHELL=/bin/bash
SESSION_MANAGER=local/sean-laptop:@/tmp/.ICE-unix/1196,unix/sean-laptop:/tmp/.ICE-unix/1196
WINDOWID=94116858423840
COLORTERM=truecolor
XDG_CONFIG_DIRS=/home/sean/.config/kdedefaults:/etc/xdg
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1
XDG_MENU_PREFIX=plasma-
ICEAUTHORITY=/run/user/1000/iceauth_bIoXOv
LANGUAGE=
LC_ADDRESS=fr_FR.UTF-8
LC_NAME=fr_FR.UTF-8
force_s3tc_enable=true
GRADLE_HOME=/usr/share/java/gradle
SHELL_SESSION_ID=43db3e2cba24462882b45e25aa2cbb30
MEMORY_PRESSURE_WRITE=c29tZSAyMDAwMDAgMjAwMDAwMAA=
DESKTOP_SESSION=plasma
LC_MONETARY=fr_FR.UTF-8
GTK_RC_FILES=/etc/gtk/gtkrc:/home/sean/.gtkrc:/home/sean/.config/gtkrc
EDITOR=nano
XDG_SEAT=seat0
PWD=/home/sean
XDG_SESSION_DESKTOP=KDE
LOGNAME=sean
XDG_SESSION_TYPE=wayland
SYSTEMD_EXEC_PID=1234
XAUTHORITY=/run/user/1000/xauth_XkCjCi
MOTD_SHOWN=pam
GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/home/sean/.gtkrc-2.0:/home/sean/.config/gtkrc-2.0
HOME=/home/sean
LC_PAPER=fr_FR.UTF-8
LANG=fr_FR.UTF-8
XDG_CURRENT_DESKTOP=KDE
KONSOLE_DBUS_SERVICE=:1.116
MEMORY_PRESSURE_WATCH=/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/session.slice/plasma-plasmashell.service/memory.pressure
WAYLAND_DISPLAY=wayland-0
KONSOLE_DBUS_SESSION=/Sessions/1
PROFILEHOME=
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
LIBVA_MESSAGING_LEVEL=1
INVOCATION_ID=98481dc57bb24385848cbfe2165f7536
KONSOLE_VERSION=250403
MANAGERPID=1004
KDE_SESSION_UID=1000
XKB_DEFAULT_LAYOUT=fr
XDG_SESSION_CLASS=user
TERM=xterm-256color
LC_IDENTIFICATION=fr_FR.UTF-8
USER=sean
COLORFGBG=15;0
QT_WAYLAND_RECONNECT=1
KDE_SESSION_VERSION=6
PAM_KWALLET5_LOGIN=/run/user/1000/kwallet5.socket
DISPLAY=:1
SHLVL=1
LC_TELEPHONE=fr_FR.UTF-8
LC_MEASUREMENT=fr_FR.UTF-8
XDG_VTNR=1
XDG_SESSION_ID=2
XDG_RUNTIME_DIR=/run/user/1000
DEBUGINFOD_URLS=https://debuginfod.archlinux.org 
LC_TIME=fr_FR.UTF-8
JOURNAL_STREAM=9:15568
KDE_FULL_SESSION=true
BROWSER=firefox
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
KDE_APPLICATIONS_AS_SCOPE=1
MAIL=/var/spool/mail/sean
LC_NUMERIC=fr_FR.UTF-8
KONSOLE_DBUS_WINDOW=/Windows/1
_=/usr/bin/env


The backtrace for kate file dialog freeze on close + triggered crash :

#0  __syscall_cancel_arch ()
    at ../sysdeps/unix/sysv/linux/x86_64/syscall_cancel.S:56
#1  0x00007f50fc4a1fda in __internal_syscall_cancel (a1=<optimized out>, 
    a2=a2@entry=0, a3=a3@entry=0, a4=a4@entry=0, a5=a5@entry=0, a6=a6@entry=0, 
    nr=75) at cancellation.c:49
#2  0x00007f50fc4a2024 in __syscall_cancel (a1=<optimized out>, a2=a2@entry=0, 
    a3=a3@entry=0, a4=a4@entry=0, a5=a5@entry=0, a6=a6@entry=0, nr=75)
    at cancellation.c:75
#3  0x00007f50fc51ef82 in __GI_fdatasync (fd=<optimized out>)
    at ../sysdeps/unix/sysv/linux/fdatasync.c:28
#4  0x00007f50fcb27d56 in QFSFileEnginePrivate::nativeSyncToDisk (
    this=0x5627075424d0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qfsfileengine_unix.cpp:163
#5  QFSFileEngine::syncToDisk (this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qfsfileengine.cpp:427
#6  0x00007f50fcb3ecf2 in QSaveFile::commit (this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qsavefile.cpp:304
#7  0x00007f50fcda2019 in QConfFileSettingsPrivate::syncConfFile (
    this=this@entry=0x562708ce32c0, confFile=0x562707c75ea0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qsettings.cpp:1495
#8  0x00007f50fcda292f in QConfFileSettingsPrivate::sync (this=0x562708ce32c0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qsettings.cpp:1304
#9  0x00007f50fcda480d in QConfFileSettingsPrivate::flush (this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qsettings.cpp:1310
#10 QSettings::~QSettings (this=<optimized out>, this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qsettings.cpp:2742
#11 0x00007f50fdfc608e in QFileDialogPrivate::saveSettings (this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/dialogs/qfiledialog.cpp:2824
#12 0x00007f50fdfb62af in QFileDialog::~QFileDialog (this=<optimized out>, 
    this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/dialogs/qfiledialog.cpp:378
#13 0x00007f50fdfc20dd in QFileDialog::~QFileDialog (this=<optimized out>, 
    this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/dialogs/qfiledialog.cpp:374
#14 QAutoPointer<QFileDialog>::~QAutoPointer (this=<optimized out>, 
    this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/dialogs/qdialog_p.h:109
#15 QFileDialog::getOpenFileUrls (parent=<optimized out>, caption=..., dir=..., 
    filter=..., selectedFilter=selectedFilter@entry=0x0, options=..., 
    supportedSchemes=...)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/dialogs/qfiledialog.cpp:2266
--Type <RET> for more, q to quit, c to continue without paging--
#16 0x00007f50fe68126f in KateViewManager::slotDocumentOpen (this=0x562707125960)
    at /usr/src/debug/kate/kate-25.04.3/apps/lib/kateviewmanager.cpp:365
#17 0x00007f50fcbd37ef 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
#18 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, 
    argv=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:4146
#19 0x00007f50fd8073c0 in QMetaObject::activate<void, bool> (
    sender=<optimized out>, mo=<optimized out>, local_signal_index=<optimized out>, 
    ret=<optimized out>, sender=<optimized out>, mo=<optimized out>, 
    local_signal_index=<optimized out>, ret=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs.h:306
#20 QAction::triggered (this=<optimized out>, _t1=<optimized out>)
    at /usr/src/debug/qt6-base/build/src/gui/Gui_autogen/include/moc_qaction.cpp:372
#21 QAction::activate (this=0x5627075817e0, event=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/gui/kernel/qaction.cpp:1104
#22 0x00007f50fde424ad in QAbstractButtonPrivate::click (
    this=this@entry=0x5627073429a0)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/widgets/qabstractbutton.cpp:364
#23 0x00007f50fde426c1 in QAbstractButton::mouseReleaseEvent (this=0x5627073603f0, 
    e=0x5627083474b0)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/widgets/qabstractbutton.cpp:976
#24 0x00007f50fdf85e61 in QToolButton::mouseReleaseEvent (this=0x5627073603f0, 
    e=0x5627083474b0)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/widgets/qtoolbutton.cpp:588
#25 0x00007f50fdd5b6c7 in QWidget::event (this=0x5627073603f0, event=0x5627083474b0)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qwidget.cpp:8987
#26 0x00007f50fdd01c70 in QApplicationPrivate::notify_helper (
    this=this@entry=0x5627068a1210, receiver=receiver@entry=0x5627073603f0, 
    e=e@entry=0x5627083474b0)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:3303
#27 0x00007f50fdd05c39 in QApplication::notify (this=<optimized out>, 
    receiver=<optimized out>, e=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:2780
#28 0x00007f50fcb68118 in QCoreApplication::notifyInternal2 (
    receiver=0x5627073603f0, event=event@entry=0x5627083474b0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1106
#29 0x00007f50fcb684fb in QCoreApplication::sendEvent (receiver=<optimized out>, 
    event=0x5627083474b0)
--Type <RET> for more, q to quit, c to continue without paging--
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1546
#30 QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, 
    data=0x5627068757a0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1879
#31 0x00007f50fce3fcf8 in QCoreApplication::sendPostedEvents (receiver=0x0, 
    event_type=0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1733
#32 postEventSourceDispatch (s=0x5627068a10b0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:246
#33 0x00007f50fb67e87d in g_main_dispatch (context=0x7f50f0000f00)
    at ../glib/glib/gmain.c:3398
#34 0x00007f50fb67fcd7 in g_main_context_dispatch_unlocked (context=0x7f50f0000f00)
    at ../glib/glib/gmain.c:4249
#35 g_main_context_iterate_unlocked (context=context@entry=0x7f50f0000f00, 
    block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at ../glib/glib/gmain.c:4314
#36 0x00007f50fb67fee5 in g_main_context_iteration (context=0x7f50f0000f00, 
    may_block=1) at ../glib/glib/gmain.c:4379
#37 0x00007f50fce3c5e2 in QEventDispatcherGlib::processEvents (this=0x5627068a2560, 
    flags=...)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:399
#38 0x00007f50fcb744b6 in QEventLoop::processEvents (this=0x7ffd7bd260a0, flags=...)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:104
#39 QEventLoop::exec (this=0x7ffd7bd260a0, flags=...)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:186
#40 0x00007f50fcb6c7c1 in QCoreApplication::exec ()
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1449
#41 0x00007f50fdcfc6aa in QApplication::exec ()
    at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:2570
#42 0x00005626df5a2ac9 in main (argc=<optimized out>, argv=<optimized out>)
    at /usr/src/debug/kate/kate-25.04.3/apps/kate/main.cpp:547


The trace was captured during the freeze, and it shows the application stuck in QSaveFile::commit(), specifically on fdatasync(), likely called during QFileDialog's cleanup. (according to ChatGPT).

Thanks
Comment 13 POPO 2025-07-09 09:17:52 UTC
🔧 Additional info about storage:
/home is on a 1.8 TiB SSD, using EXT4, with ~182 GiB free (91% used).

The system itself is on a 467.4 GiB NVMe SSD, with ~312 GiB free.

No network shares, no FUSE filesystems, and no disk encryption (like LUKS) involved.
Comment 14 Harald Sitter 2025-07-09 10:08:26 UTC
That is rather strange. Getting stuck on fdatasync there suggests you either have a kernel problem, or a filesystem problem, or a drive problem. But I think you'd notice either of those more prominently elsewhere.

Please repeat the test so we can see if the backtrace is the same.
Comment 15 POPO 2025-07-09 12:49:41 UTC
(In reply to Harald Sitter from comment #14)
> That is rather strange. Getting stuck on fdatasync there suggests you either
> have a kernel problem, or a filesystem problem, or a drive problem. But I
> think you'd notice either of those more prominently elsewhere.
> 
> Please repeat the test so we can see if the backtrace is the same.

Here is the second test:

#0  __syscall_cancel_arch ()
    at ../sysdeps/unix/sysv/linux/x86_64/syscall_cancel.S:56
#1  0x00007ff7f5ea1fda in __internal_syscall_cancel (a1=<optimized out>, 
    a2=a2@entry=0, a3=a3@entry=0, a4=a4@entry=0, a5=a5@entry=0, a6=a6@entry=0, 
    nr=75) at cancellation.c:49
#2  0x00007ff7f5ea2024 in __syscall_cancel (a1=<optimized out>, a2=a2@entry=0, 
    a3=a3@entry=0, a4=a4@entry=0, a5=a5@entry=0, a6=a6@entry=0, nr=75)
    at cancellation.c:75
#3  0x00007ff7f5f1ef82 in __GI_fdatasync (fd=<optimized out>)
    at ../sysdeps/unix/sysv/linux/fdatasync.c:28
#4  0x00007ff7f6527d56 in QFSFileEnginePrivate::nativeSyncToDisk (
    this=0x55cc216fa6e0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qfsfileengine_unix.cpp:163
#5  QFSFileEngine::syncToDisk (this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qfsfileengine.cpp:427
#6  0x00007ff7f653ecf2 in QSaveFile::commit (this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qsavefile.cpp:304
#7  0x00007ff7f67a2019 in QConfFileSettingsPrivate::syncConfFile (
    this=this@entry=0x55cc21d637c0, confFile=0x55cc21e65560)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qsettings.cpp:1495
#8  0x00007ff7f67a292f in QConfFileSettingsPrivate::sync (this=0x55cc21d637c0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qsettings.cpp:1304
#9  0x00007ff7f67a480d in QConfFileSettingsPrivate::flush (this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qsettings.cpp:1310
#10 QSettings::~QSettings (this=<optimized out>, this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/io/qsettings.cpp:2742
#11 0x00007ff7f79c608e in QFileDialogPrivate::saveSettings (this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/dialogs/qfiledialog.cpp:2824
#12 0x00007ff7f79b62af in QFileDialog::~QFileDialog (this=<optimized out>, 
    this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/dialogs/qfiledialog.cpp:378
#13 0x00007ff7f79c20dd in QFileDialog::~QFileDialog (this=<optimized out>, 
    this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/dialogs/qfiledialog.cpp:374
#14 QAutoPointer<QFileDialog>::~QAutoPointer (this=<optimized out>, 
    this=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/dialogs/qdialog_p.h:109
#15 QFileDialog::getOpenFileUrls (parent=<optimized out>, caption=..., dir=..., 
    filter=..., selectedFilter=selectedFilter@entry=0x0, options=..., 
    supportedSchemes=...)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/dialogs/qfiledialog.cpp:2266
--Type <RET> for more, q to quit, c to continue without paging--
#16 0x00007ff7f808726f in KateViewManager::slotDocumentOpen (this=0x55cc211682f0)
    at /usr/src/debug/kate/kate-25.04.3/apps/lib/kateviewmanager.cpp:365
#17 0x00007ff7f65d37ef 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
#18 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, 
    argv=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:4146
#19 0x00007ff7f72073c0 in QMetaObject::activate<void, bool> (
    sender=<optimized out>, mo=<optimized out>, local_signal_index=<optimized out>, 
    ret=<optimized out>, sender=<optimized out>, mo=<optimized out>, 
    local_signal_index=<optimized out>, ret=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs.h:306
#20 QAction::triggered (this=<optimized out>, _t1=<optimized out>)
    at /usr/src/debug/qt6-base/build/src/gui/Gui_autogen/include/moc_qaction.cpp:372
#21 QAction::activate (this=0x55cc214f8d70, event=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/gui/kernel/qaction.cpp:1104
#22 0x00007ff7f78424ad in QAbstractButtonPrivate::click (
    this=this@entry=0x55cc213cb090)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/widgets/qabstractbutton.cpp:364
#23 0x00007ff7f78426c1 in QAbstractButton::mouseReleaseEvent (this=0x55cc2141bcc0, 
    e=0x55cc21f69df0)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/widgets/qabstractbutton.cpp:976
#24 0x00007ff7f7985e61 in QToolButton::mouseReleaseEvent (this=0x55cc2141bcc0, 
    e=0x55cc21f69df0)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/widgets/qtoolbutton.cpp:588
#25 0x00007ff7f775b6c7 in QWidget::event (this=0x55cc2141bcc0, event=0x55cc21f69df0)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qwidget.cpp:8987
#26 0x00007ff7f7701c70 in QApplicationPrivate::notify_helper (
    this=this@entry=0x55cc209be210, receiver=receiver@entry=0x55cc2141bcc0, 
    e=e@entry=0x55cc21f69df0)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:3303
#27 0x00007ff7f7705c39 in QApplication::notify (this=<optimized out>, 
    receiver=<optimized out>, e=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:2780
#28 0x00007ff7f6568118 in QCoreApplication::notifyInternal2 (
    receiver=0x55cc2141bcc0, event=event@entry=0x55cc21f69df0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1106
#29 0x00007ff7f65684fb in QCoreApplication::sendEvent (receiver=<optimized out>, 
    event=0x55cc21f69df0)
--Type <RET> for more, q to quit, c to continue without paging--
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1546
#30 QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, 
    data=0x55cc209927a0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1879
#31 0x00007ff7f683fcf8 in QCoreApplication::sendPostedEvents (receiver=0x0, 
    event_type=0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1733
#32 postEventSourceDispatch (s=0x55cc209be0b0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:246
#33 0x00007ff7f507e87d in g_main_dispatch (context=0x7ff7e8000f00)
    at ../glib/glib/gmain.c:3398
#34 0x00007ff7f507fcd7 in g_main_context_dispatch_unlocked (context=0x7ff7e8000f00)
    at ../glib/glib/gmain.c:4249
#35 g_main_context_iterate_unlocked (context=context@entry=0x7ff7e8000f00, 
    block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at ../glib/glib/gmain.c:4314
#36 0x00007ff7f507fee5 in g_main_context_iteration (context=0x7ff7e8000f00, 
    may_block=1) at ../glib/glib/gmain.c:4379
#37 0x00007ff7f683c5e2 in QEventDispatcherGlib::processEvents (this=0x55cc209bf560, 
    flags=...)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:399
#38 0x00007ff7f65744b6 in QEventLoop::processEvents (this=0x7ffe6cb95930, flags=...)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:104
#39 QEventLoop::exec (this=0x7ffe6cb95930, flags=...)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:186
#40 0x00007ff7f656c7c1 in QCoreApplication::exec ()
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1449
#41 0x00007ff7f76fc6aa in QApplication::exec ()
    at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:2570
#42 0x000055cbe5e62ac9 in main (argc=<optimized out>, argv=<optimized out>)
    at /usr/src/debug/kate/kate-25.04.3/apps/kate/main.cpp:547
Comment 16 POPO 2025-07-09 13:02:52 UTC
Hi Harald,

It seems the file ~/.config/QtProject.conf is completely screwed :

[FileDialog]
history=@Invalid()
lastVisited=file:///home/sean/.config/
qtVersion=6.9.1
shortcuts=file:///home/sean/Bureau, file:///home/sean, file:///home/sean/TÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃ

This goes on until line 3361 including a linec ontaining more than 140 841 caracters.
Comment 17 POPO 2025-07-09 13:19:03 UTC
Thanks Harald for your help.

I deleted ~/.config/QtProject.conf and rebooted, QtProject.conf was regenerated and the issue disppeared.

I'll consider a donation to the KDE team as a gesture of gratitude.

If you'd like me to give more information as to why it happened, let me know.
Comment 18 Harald Sitter 2025-07-09 13:30:08 UTC
Cool. Do you have a backup of the file? To diagnose this properly we'll need some more information about it.

Which one is the super long line? shortcuts=?
Comment 19 POPO 2025-07-09 13:57:20 UTC
(In reply to Harald Sitter from comment #18)
> Cool. Do you have a backup of the file? To diagnose this properly we'll need
> some more information about it.
> 
> Which one is the super long line? shortcuts=?

Here is the corrupt file, it's 64MiB

https://drive.google.com/drive/folders/1cARSMlGTsNwASXfT2ACdwUoVcDTktdzs?usp=sharing
Comment 20 Harald Sitter 2025-07-09 14:45:15 UTC
Thanks. I believe this is the following Qt bug: https://bugreports.qt.io/browse/QTBUG-133804

I expect it will happen again if you are still regularly using Qt5 software, so maybe reset the file every once in a while until Qt has a fix for this.