Summary: | kwin locks up with 99% cpu usage | ||
---|---|---|---|
Product: | [Plasma] kwin | Reporter: | Vincenzo Ciancia <vincenzo_ml> |
Component: | general | Assignee: | KWin default assignee <kwin-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | crash | ||
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Fedora RPMs | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Vincenzo Ciancia
2005-09-16 16:43:51 UTC
I have another backtrace, the only difference is in the first lines: (gdb) #0 0x0018847b in KWinInternal::Client::windowType () from /usr/lib/libkdeinit_kwin.so #1 0x001885db in KWinInternal::Client::isDialog () from /usr/lib/libkdeinit_kwin.so #2 0x00188750 in KWinInternal::Client::wantsTabFocus () from /usr/lib/libkdeinit_kwin.so #3 0x00198ed2 in KWinInternal::Workspace::CDEWalkThroughWindows () from /usr/lib/libkdeinit_kwin.so #4 0x0019a062 in KWinInternal::Workspace::slotWalkThroughWindows () from /usr/lib/libkdeinit_kwin.so #5 0x0018541b in KWinInternal::Workspace::qt_invoke () ... Both the backtraces clearly show KWin is in code for the Alt+Tab dialog, so they disagree with your description of the problem. Your observation shed more light on the problem. By trying with my alt+tab combination, which is win+tab, I finally discovered a way to reproduce the bug on my system. I often use a single full-screen window per workspace, and I have a combination to close the window, and the bug often manifested after having closed a window, but now I have only been able to reproduce the bug with the alt+tab combination so may be I incidentally press alt+tab (maybe to check if there are other windows below the full-screen one) and do not notice that. However, to reproduce the bug, I press alt+tab, or win+tab, or whatever key combination I assign to it, and then, even after some time (say 5-6 seconds) I click on the desktop. This triggers the bug. I already tried deactivating khotkeys and also the K menu. WORKAROUND: The bug does not show if I choose "show window list while switching windows". Also, I found that the bug shows up even in Xnest and that the bug sometimes (but not always) does not show up if I manually start kwin, kicker, kdestkop, korgac, klipper from the command line instead of using startkde. This is a grave bug, leading to the entire computer being unusable in such a way that a normal user can difficultly understand what happened, and I think that this bug should at least be _confirmed_. It's still there in kde 3.5. It's easy: just go to kcontrol, then 1) Desktop->Window Behaviour->Deselect "Show Window list while switching windows", ok 2) Close all your windows 3) Press ALT+TAB, release alt+tab 4) Click on the empty desktop In kde 3.5 you can still ctrl+alt+backspace, luckily. Is it just my problem on three different machines, or is there anyone else who can confirm? SVN commit 488474 by lunakl: Fix a nasty infinite loop with CDE-style Alt+Tab. BUG: 112737 M +18 -17 tabbox.cpp --- branches/KDE/3.5/kdebase/kwin/tabbox.cpp #488473:488474 @@ -932,28 +932,29 @@ options_traverse_all = KGlobal::config()->readNumEntry("TraverseAll", false ); } - if ( !forward ) + Client* firstClient = 0; + do { - do + nc = forward ? nextStaticClient(nc) : previousStaticClient(nc); + if (!firstClient) { - nc = previousStaticClient(nc); - } while (nc && nc != c && - (( !options_traverse_all && !nc->isOnDesktop(currentDesktop())) || - nc->isMinimized() || !nc->wantsTabFocus() ) ); - } - else - { - do + // When we see our first client for the second time, + // it's time to stop. + firstClient = nc; + } + else if (nc == firstClient) { - nc = nextStaticClient(nc); - } while (nc && nc != c && - (( !options_traverse_all && !nc->isOnDesktop(currentDesktop())) || - nc->isMinimized() || !nc->wantsTabFocus() ) ); - } - if (c && c != nc) - lowerClient( c ); + // No candidates found. + nc = 0; + break; + } + } while (nc && nc != c && + (( !options_traverse_all && !nc->isOnDesktop(currentDesktop())) || + nc->isMinimized() || !nc->wantsTabFocus() ) ); if (nc) { + if (c && c != nc) + lowerClient( c ); if ( options->focusPolicyIsReasonable() ) { activateClient( nc ); *** Bug 118758 has been marked as a duplicate of this bug. *** |