https://bugs.kde.org/show_bug.cgi?id=431256
Bug ID: 431256 Summary: Shell freezes for more than 2 minutes when opening a configuration dialog Product: plasmashell Version: master Platform: Other OS: Linux Status: REPORTED Severity: major Priority: NOR Component: general Assignee: k...@davidedmundson.co.uk Reporter: o...@geek.co.il CC: plasma-b...@kde.org Target Milestone: 1.0 Using Neon unstable, but this has been happening for quite a while - at least from 5.18 - though I feel it has become worse in the last few months. When opening any configuration dialog for the shell - such as the system tray configuration dialog, audio volume settings, desktop configuration, etc - the desktop shell freezes for more than 2 minutes - including desktop, panel, widgets, etc. I'm running Plasma with the SystemD integration, and looking at the journal, there aren't many log messages that seem relevant, though I got quite a few messages in the form of: Jan 06 22:12:44 vesho plasmashell[53640]: kf.package: No metadata file in the package, expected it at: "/home/odeda/Documents/Wallpapers/xxx/xxx/" which, after reviewing I went and added metadata.desktop files to some of those directories, and as a result these messages have stopped appearing (for directories where I added new metadata files), but the freezing situation has not improved. Still looking at the folders listed, it appears plasmashell scans my wallpaper directory structure - I have a large wallpaper collection (> 10000 images) in various directories. I ran `strace -e trace=lstat` on plasmashell, and it looks like every time a configuration dialog opens (even dialogs not related to wallpapers), plasmashell scans the path to any image that is in a folder that was ever configured as a wallpaper folder or wallpaper image. There are a few additional lstat() that I wasn't surprised to see, such as .desktop file in ~/Desktop and a couple of configuration files, but almost everything else is wallpaper image files. Here is a snippet showing lstat usage by plasmashell for scanning **just one** such image: ----8<---- [pid 4478] 11:08:42 lstat("/home", {st_mode=S_IFDIR|0755, st_size=64, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda", {st_mode=S_IFDIR|0755, st_size=4960, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents", {st_mode=S_IFDIR|0755, st_size=2244, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile", {st_mode=S_IFDIR|0777, st_size=418, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media", {st_mode=S_IFDIR|0777, st_size=92, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls", {st_mode=S_IFDIR|0777, st_size=316, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art", {st_mode=S_IFDIR|0777, st_size=256, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art/original", {st_mode=S_IFDIR|0775, st_size=45706, ...}) = 0 [pid 4478] 11:08:42 lstat("/home", {st_mode=S_IFDIR|0755, st_size=64, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda", {st_mode=S_IFDIR|0755, st_size=4960, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents", {st_mode=S_IFDIR|0755, st_size=2244, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile", {st_mode=S_IFDIR|0777, st_size=418, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media", {st_mode=S_IFDIR|0777, st_size=92, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls", {st_mode=S_IFDIR|0777, st_size=316, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art", {st_mode=S_IFDIR|0777, st_size=256, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art/original", {st_mode=S_IFDIR|0775, st_size=45706, ...}) = 0 [pid 4478] 11:08:42 lstat("/home", {st_mode=S_IFDIR|0755, st_size=64, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda", {st_mode=S_IFDIR|0755, st_size=4960, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local", {st_mode=S_IFDIR|0755, st_size=482, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local/share", {st_mode=S_IFDIR|0755, st_size=5326, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local/share/wallpapers", {st_mode=S_IFDIR|0775, st_size=208, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local/share/wallpapers/art-original", {st_mode=S_IFLNK|0777, st_size=54, ...}) = 0 [pid 4478] 11:08:42 lstat("/home", {st_mode=S_IFDIR|0755, st_size=64, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda", {st_mode=S_IFDIR|0755, st_size=4960, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents", {st_mode=S_IFDIR|0755, st_size=2244, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile", {st_mode=S_IFDIR|0777, st_size=418, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media", {st_mode=S_IFDIR|0777, st_size=92, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls", {st_mode=S_IFDIR|0777, st_size=316, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art", {st_mode=S_IFDIR|0777, st_size=256, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art/original", {st_mode=S_IFDIR|0775, st_size=45706, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art/original/Dl7wmzRUwAAKssm.jpeg", {st_mode=S_IFREG|0664, st_size=325843, ...}) = 0 [pid 4478] 11:08:42 lstat("/home", {st_mode=S_IFDIR|0755, st_size=64, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda", {st_mode=S_IFDIR|0755, st_size=4960, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local", {st_mode=S_IFDIR|0755, st_size=482, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local/share", {st_mode=S_IFDIR|0755, st_size=5326, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local/share/wallpapers", {st_mode=S_IFDIR|0775, st_size=208, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local/share/wallpapers/art-original", {st_mode=S_IFLNK|0777, st_size=54, ...}) = 0 [pid 4478] 11:08:42 lstat("/home", {st_mode=S_IFDIR|0755, st_size=64, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda", {st_mode=S_IFDIR|0755, st_size=4960, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents", {st_mode=S_IFDIR|0755, st_size=2244, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile", {st_mode=S_IFDIR|0777, st_size=418, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media", {st_mode=S_IFDIR|0777, st_size=92, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls", {st_mode=S_IFDIR|0777, st_size=316, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art", {st_mode=S_IFDIR|0777, st_size=256, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art/original", {st_mode=S_IFDIR|0775, st_size=45706, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art/original/Dl7wmzRUwAAKssm.jpeg", {st_mode=S_IFREG|0664, st_size=325843, ...}) = 0 [pid 4478] 11:08:42 lstat("/home", {st_mode=S_IFDIR|0755, st_size=64, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda", {st_mode=S_IFDIR|0755, st_size=4960, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local", {st_mode=S_IFDIR|0755, st_size=482, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local/share", {st_mode=S_IFDIR|0755, st_size=5326, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local/share/wallpapers", {st_mode=S_IFDIR|0775, st_size=208, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/.local/share/wallpapers/art-original", {st_mode=S_IFLNK|0777, st_size=54, ...}) = 0 [pid 4478] 11:08:42 lstat("/home", {st_mode=S_IFDIR|0755, st_size=64, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda", {st_mode=S_IFDIR|0755, st_size=4960, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents", {st_mode=S_IFDIR|0755, st_size=2244, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile", {st_mode=S_IFDIR|0777, st_size=418, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media", {st_mode=S_IFDIR|0777, st_size=92, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls", {st_mode=S_IFDIR|0777, st_size=316, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art", {st_mode=S_IFDIR|0777, st_size=256, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art/original", {st_mode=S_IFDIR|0775, st_size=45706, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art/original/Dl7wmzRUwAAKssm.jpeg", {st_mode=S_IFREG|0664, st_size=325843, ...}) = 0 [pid 4478] 11:08:42 lstat("/home", {st_mode=S_IFDIR|0755, st_size=64, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda", {st_mode=S_IFDIR|0755, st_size=4960, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents", {st_mode=S_IFDIR|0755, st_size=2244, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile", {st_mode=S_IFDIR|0777, st_size=418, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media", {st_mode=S_IFDIR|0777, st_size=92, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls", {st_mode=S_IFDIR|0777, st_size=316, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art", {st_mode=S_IFDIR|0777, st_size=256, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art/original", {st_mode=S_IFDIR|0775, st_size=45706, ...}) = 0 [pid 4478] 11:08:42 lstat("/home/odeda/Documents/mobile/media/Walls/art/original/Dl7wmzRUwAAKssm.jpeg", {st_mode=S_IFREG|0664, st_size=325843, ...}) = 0 ----8<---- This is then repeated many thousands of times. When reviewing the full log, I think I see several different patterns of access, including a few additional catatonic patterns in child processes, and the above pattern is just one of them. I put the full log - about 400MB uncompressed - here: http://code.geek.co.il/dumps/plasmashell-journal-lstat.log.gz BTW, I'm not really sure where the list of folders to scan comes from: the way I set up my system is that I have set up the ~/.local/share/wallpapers directory to contain symbolic links to specific themed folders in my wallpaper collection (such as Walls/art/original shown above), but not all of the folder that exist there, and indeed when looking at the lstat log - plasmashell scans just the folders linked from ~/.local/share/wallpapers. The problem is that I don't understand where plasmashell finds that configuration - it is not mentioned in ~/.config/plasma-org.kde.plasma.desktop-appletsrc, but if I open the wallpaper configuration dialog and choose "Slideshow", the folder list is pre-populated with ~/.local/share/wallpapers,/usr/share/plasma/wallpapers,/usr/share/wallpapers - which are all the directories scanned in the log - and I have no idea where it is getting that default configuration from. -- You are receiving this mail because: You are watching all bug changes.