| Summary: | kwin crash when switching windows (3.5.5) | ||
|---|---|---|---|
| Product: | [Plasma] kwin | Reporter: | Robert Gomułka <robertg.123> |
| Component: | general | Assignee: | KWin default assignee <kwin-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | crash | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Debian testing | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
| Attachments: |
Backtrace
In some cases clients were not properly added to a new group. |
||
|
Description
Robert Gomułka
2006-12-23 21:54:13 UTC
Created attachment 19022 [details]
Backtrace
The following lines can be observed on console: ASSERT: _members contains (member_P) win/group.cpp(101). (Or similar lines). This might be related to the way we (debian) has patched it. I am currently trying if it also exists if I do a full kwin branch pull instead of trying to find the right fixes. I get back soon to tell if it is 'blame me & ana' or not. it is not 'blame me & ana' - I have tried with kwin svn head as of a couple of hours ago (I think r615333)
It crashes at least in bluej when I try that.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
[Thread debugging using libthread_db enabled]
[New Thread -1497790784 (LWP 4710)]
[KCrash handler]
#5 QValueListPrivate<KWinInternal::Client*>::insert (this=0x8114830,
it=@0xafb1b13c, x=@0xafb1b154) at /usr/share/qt3/include/qvaluelist.h:291
#6 0xa7ec360d in KWinInternal::Group::addMember (this=0x811f610,
member_P=0x812bc68) at /usr/share/qt3/include/qvaluelist.h:526
#7 0xa7ef4b15 in KWinInternal::Client::checkGroup (this=0x812bc68,
set_group=0x0, force=true)
at /home/pusling/src/kdebase-3.5.5a.dfsg.1/./kwin/group.cpp:983
#8 0xa7ef4e19 in KWinInternal::Client::setTransient (this=0x812bc68,
new_transient_for_id=41943090)
at /home/pusling/src/kdebase-3.5.5a.dfsg.1/./kwin/group.cpp:583
#9 0xa7efd91c in KWinInternal::Client::readTransient (this=0x812bc68)
at /home/pusling/src/kdebase-3.5.5a.dfsg.1/./kwin/group.cpp:566
#10 0xa7efdc28 in KWinInternal::Client::manage (this=0x812bc68, w=41943129,
isMapped=false)
at /home/pusling/src/kdebase-3.5.5a.dfsg.1/./kwin/manage.cpp:112
#11 0xa7effbb6 in KWinInternal::Workspace::createClient (this=0x809d6b8,
w=41943129, is_mapped=false)
at /home/pusling/src/kdebase-3.5.5a.dfsg.1/./kwin/workspace.cpp:482
#12 0xa7f031ab in KWinInternal::Workspace::workspaceEvent (this=0x809d6b8,
e=0xafb1b8f8)
at /home/pusling/src/kdebase-3.5.5a.dfsg.1/./kwin/events.cpp:360
#13 0xa7f0329e in KWinInternal::Application::x11EventFilter (this=0xafb1bad0,
e=0xafb1b8f8)
at /home/pusling/src/kdebase-3.5.5a.dfsg.1/./kwin/main.cpp:155
#14 0xa7087133 in qt_x11EventFilter (ev=0xafb1b8f8)
at kernel/qapplication_x11.cpp:387
#15 0xa709705b in QApplication::x11ProcessEvent (this=0xafb1bad0,
event=0xafb1b8f8) at kernel/qapplication_x11.cpp:3343
#16 0xa70adcb2 in QEventLoop::processEvents (this=0x8071c28, flags=4)
at kernel/qeventloop_x11.cpp:192
#17 0xa7121129 in QEventLoop::enterLoop (this=0x8071c28)
at kernel/qeventloop.cpp:198
#18 0xa7120f4a in QEventLoop::exec (this=0x8071c28)
at kernel/qeventloop.cpp:145
#19 0xa710876f in QApplication::exec (this=0xafb1bad0)
at kernel/qapplication.cpp:2758
#20 0xa7f01412 in kdemain (argc=1, argv=0xafb1bd44)
at /home/pusling/src/kdebase-3.5.5a.dfsg.1/./kwin/main.cpp:285
#21 0x08048482 in main (argc=) at kwin.la.cpp:2
#22 0xa7c4dea8 in __libc_start_main () from /lib/tls/libc.so.6
#23 0x080483d1 in _start () at ../sysdeps/i386/elf/start.S:119
Created attachment 19058 [details]
In some cases clients were not properly added to a new group.
So double Group object destruction or accessing already freed Group objects led
to SIGSERVs.
SVN commit 619873 by lunakl:
Properly add window to a group.
BUG: 139180
M +4 -3 group.cpp
--- branches/KDE/3.5/kdebase/kwin/group.cpp #619872:619873
@@ -993,10 +993,11 @@
in_group->removeMember( this );
in_group = NULL;
}
- in_group = new_group;
- if( in_group == NULL )
+ if( new_group == NULL )
+ new_group = new Group( None, workspace() );
+ if( in_group != new_group )
{
- in_group = new Group( None, workspace());
+ in_group = new_group;
in_group->addMember( this );
}
}
|