kded4 lockup (which makes the desktop unusable so this is important)

Andreas Hartmetz ahartmetz at gmail.com
Thu May 8 17:08:42 BST 2008

2008/5/8 Andreas Hartmetz <ahartmetz at gmail.com>:
> Hi all,
>  yesterday I finally got around to doing some research into the
>  infamous problem that sometimes when you alt-tab the alt key would
>  "stick" and effectively make the desktop useless.
>  It seems to be caused by a completely stuck kded4. It is stuck in the
>  dirwatcher part, apparently.
>  The following output from gdb and .xsession-errors is probably
>  information enough information to find the bug for somebody who knows
>  the code involved (David maybe?).
>  Note that after I killed kded4 when I had extracted enough information
>  out of it the keyboard started to work normally again and I could
>  continue to use the desktop (I did the debugging from a different
>  machine over ssh).
>  I think we should also consider ways to make kded4 less brittle
>  because it's quite important. Resistance against crashes in modules
>  would be cool but also somewhat heavyweight so maybe one thread per
>  module would help? This is assuming that QDBus can work sensibly in a
>  multithreaded environment, only blocking one thread waiting for one
>  response.
>  Anyway, here is the debug output etc.
>  #0  0xb7fd3410 in __kernel_vsyscall ()
>  #1  0xb75ae8f3 in __write_nocancel () from
>  #/lib/tls/i686/cmov/libpthread.so.0
>  #2  0xb6b58dca in Client::writeToServer () from /usr/lib/libfam.so.0
>  #3  0xb6b5b9ef in ?? () from /usr/lib/libfam.so.0

Did you know...
FAM has been the default backend of KDirWatch for years but it was not
actually used due to a typo in an #ifdef (!!!) that was fixed four
days ago.
As a workaround for that nasty lockup I have modified KDirWatch to use
inotify as the default backend again, this time in a more obvious

Index: kdirwatch.cpp
--- kdirwatch.cpp       (Revision 805216)
+++ kdirwatch.cpp       (Arbeitskopie)
@@ -124,7 +124,7 @@
   m_nfsPollInterval = config.readEntry("NFSPollInterval", 5000);
   m_PollInterval = config.readEntry("PollInterval", 500);

-  QString method = config.readEntry("PreferredMethod", "Fam");
+  QString method = config.readEntry("PreferredMethod", "inotify");
   if (method == "Fam")
     m_preferredMethod = Fam;

I can't believe it.
Update your kdelibs now.
I believe that we should still look for ways to make kded (way) more
robust. Strange things will happen everytime one module takes down or,
worse, locks up kded.


More information about the kde-core-devel mailing list