Summary: | The cache corrupt message appears even if the respective directories are deleted | ||
---|---|---|---|
Product: | [Unmaintained] kdelibs | Reporter: | Sujith H <sujith.h> |
Component: | kdeui | Assignee: | Michael Pyne <mpyne> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | faure, kde-bugs, kdelibs-bugs, linux.nerdy.kid, m.wege, mail |
Priority: | NOR | ||
Version: | SVN | ||
Target Milestone: | --- | ||
Platform: | Ubuntu | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | 4.6 | |
Sentry Crash Report: | |||
Attachments: | .xsession-errors file, a snapshot |
Simply deleting directories does not cause a program to lose its connection to a shared cache (but it does prevent newly-started programs from being able to make a connection). To completely close out a shared cache you should also close any programs that were using one (this essentially means any program built on the KDE platform though). So, if restarting the KDE session after removing the .kcache files doesn't solve the issue then please re-open this bug. Yes even if I restart the kde session after removing the .kcache files, the cache currupt message comes. Hi, I can confirm the messages appearing in Fedora rawhide. They only are there when desktop effects are active. (Tried a new user without desktop effects: no messages) @comment 1: Only opening Kickoff gives these messages :-) Currently running KDE 4.6 rc1. (for me, it started very early in the 4.6 cycle, when the new shared icon-cache entered) Martin Kho Hi, May be it's relevant to tell that I'm using the nouveau-driver (GF 7600 GS, aka NV4B). * xorg-x11-drv-nouveau-0.0.16-14.20101129gitf29afe6.fc15.x86_64 * xorg-x11-server-Xorg-1.9.99.1-2.20101201.fc15.x86_64 I'm using the OpenGL compositing type. To enable OpenGL: * mesa-dri-drivers-experimental-7.10-0.17.fc15.x86_64 Martin Kho Well, it shouldn't be related to compositing or drivers per se. However, switching rendering mode to use composition might have KWin use KIconLoader/Plasma in a different code path, which eventually reaches into KSharedDataCache. KSharedDataCache has been in use since 4.5, not 4.6. The 4.6 change was to output the warning about cache corruption since there were some users having crashes in 4.5 when changing the system time. I noted then that it is very likely a bug somewhere else (that I still haven't found :( ), but checking for that condition and turning it into a warning instead of a crash is my best solution so far. I can confirm this. According to the .xsession-error entries, this is at least caused by 3 applications here: kmix(3289)/kdeui (KIconLoader): Trying to remove an entry which is already invalid. This cache is likely corrupt. krunner(3264)/kdeui (KIconLoader): Trying to remove an entry which is already invalid. This cache is likely corrupt. plasma-desktop(3161)/kdeui (KIconLoader): Trying to remove an entry which is already invalid. This cache is likely corrupt. I stopped my KDE session, cleaned up all cache directories and restarted KDE to make sure no old entries cause this error. The KDE profile was completely reset before too, so no old config settings are involved. KDE SC 4.6 RC1 Qt 4.7.1 Gentoo Linux Kernel 2.6.36 Well I've seen similar log output by now so I'll take the bug for now. Maybe I'll add some super-debugging output for 4.7 so I can see what operations are not completing right. As it is now though, the cache should be operating safely, even if you lose some of the performance benefit from its mis-organization. *** Bug 262621 has been marked as a duplicate of this bug. *** SVN commit 1214939 by mpyne: Fully clear cache metadata in clearInternal(). KSharedDataCache uses the clearInternal() method to reset the cache, which is used if corruption is detected, and when directed through KSharedDataCache::clear(). For whatever reason I thought that simply setting the "first page" pointer for each possible index entry would be sufficient, but that is not the case at all, as various methods which go through the cache entries also check things such as the use count, last access time, etc. Assuming no other errors (:-/) this should be the cause of bug 260309. (The exact sequence would be a KSharedDataCache user runs ::clear(), later adds some entries that invoke removeUsedPages(), and removeUsedPages() goes through *all* index entries, including ones that appear to be in use since their use count is >0, but their first page is still invalid). Easiest way to invoke this bug I've found is to simply run "plasmoidviewer clock" at a konsole. While reviewing code I also added a comment clarifying the usage of a page variable as an index entry, and changed the index entry comparison functions to look for any invalid page instead of checking for -1, as it takes me 5 minutes every single time I review removeUsedPages to prove that -1 is the only possible value <0. These changes will not be backported to KDE Platform 4.6. CCBUG:260309 M +12 -7 kshareddatacache.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=1214939 SVN commit 1214946 by mpyne: Backport "Fully clear cache metadata in clearInternal()" to 4.6. KSharedDataCache uses the clearInternal() method to reset the cache, which is used if corruption is detected, and when directed through KSharedDataCache::clear(). For whatever reason I thought that simply setting the "first page" pointer for each possible index entry would be sufficient, but that is not the case at all, as various methods which go through the cache entries also check things such as the use count, last access time, etc. Assuming no other errors (:-/) this should be the cause of bug 260309. (The exact sequence would be a KSharedDataCache user runs ::clear(), later adds some entries that invoke removeUsedPages(), and removeUsedPages() goes through *all* index entries, including ones that appear to be in use since their use count is >0, but their first page is still invalid). Easiest way to invoke this bug I've found is to simply run "plasmoidviewer clock" at a konsole. This should fix the annoying bug 260309 just in time for KDE Platform 4.6. I'm CC-ing release team so that there are no surprises, but I have hopefully demonstrated enough of the issue to prove that this patch is at least "more correct" than previous behavior. It is possible that this was also the proximate cause of the Plasma crashes when changing the system time for Daylight Savings (which I worked around with the error message you've been seeing for months), bug 253795. FIXED-IN:4.6 BUG:260309 CCBUG:253795 CCMAIL:release-team@kde.org M +5 -0 kshareddatacache.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=1214946 |
Created attachment 54833 [details] .xsession-errors file, a snapshot Version: SVN (using Devel) OS: Linux I was debugging, reason for the slowness of my system, after building kde from the trunk. Found that the message: krunner(13883)/kdeui (KIconLoader): Trying to remove an entry which is already invalid. This cache is likely corrupt. krunner(13883)/kdeui (KIconLoader): Trying to remove an entry which is already invalid. This cache is likely corrupt. krunner(13883)/kdeui (KIconLoader): Trying to remove an entry which is already invalid. This cache is likely corrupt. krunner(13883)/kdeui (KIconLoader): Trying to remove an entry which is already invalid. This cache is likely corrupt. krunner(13883)/kdeui (KIconLoader): Trying to remove an entry which is already invalid. This cache is likely corrupt. and it goes on. I deleted the directories by executing the following commands: *) cd `kde4-config --path cache` *) rm -fr kpc icon-cache.kcache Again I can see the message related to currupt cache in the .xsession-errors file. I hope this shouldn't occur once the directories are deleted. Reproducible: Always Steps to Reproduce: Delete the directories using the method: *) cd `kde4-config --path cache` *) rm -fr kpc icon-cache.kcache Disable and enable the desktop effects after this. The message will again come in the .xsession-errors file.