| 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 First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Fedora RPMs | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented 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. *** |