Diffusion KWin d948d247fe43

Don't crash when highlighted tabbox client is closed

Authored by zzag on Apr 30 2019, 8:46 AM.

Description

Don't crash when highlighted tabbox client is closed

Summary:
The compositor tries to switch to the next tabbox client when currently
highlighted client is closed. Though there is a small issue with that.
Because the switch happens too late, a dangling pointer can be inserted
into the unconstrained stacking order, which can lead to a crash later on.

There are two cases:

  • compositing is on;
  • compositing is off.

Compositing is on: TabBox will try to un-elevate currently highlighted
client, though by that time the client no longer owns EffectWindow, so
this is basically a no-op (that's why we haven't experienced this bug
before).

Compositing is off: TabBox will try to restack currently hightlighted
client under the next tabbox client. Given that the restack method
doesn't do any sanity checks(see Client::manage why), a client that is
about to be destroyed will be re-inserted back into the unconstrained
stacking order.

This change ensures that the switch happens before currently highlighted
client is removed from the stacking order.

BUG: 406784

Test Plan:

  • Turn off compositing;
  • Follow steps to reproduce in the bug report (see comment 2).

Reviewers: KWin, davidedmundson

Reviewed By: KWin, davidedmundson

Subscribers: kwin

Tags: KWin

Differential Revision: https://phabricator.kde.org/D20916

Details

Committed
zzagJul 15 2019, 1:56 PM
Reviewer
KWin
Differential Revision
D20916: Don't crash when highlighted tabbox client is closed
Parents
R108:c3c030d8b595: Fix creation of kdeglobals if /etc/xdg/kdeglobals present
Branches
Unknown
Tags
Unknown