Don't crash when highlighted tabbox client is closed
ClosedPublic

Authored by zzag on Apr 30 2019, 10:02 AM.

Details

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).

Diff Detail

Repository
R108 KWin
Branch
tabbox-switch-to-next-before-destroying-highlighted-client
Lint
Lint OK
Unit
No Unit Test Coverage
Build Status
Buildable 11381
Build 11399: arc lint + arc unit
zzag created this revision.Apr 30 2019, 10:02 AM
Restricted Application added a project: KWin. · View Herald TranscriptApr 30 2019, 10:02 AM
Restricted Application added a subscriber: kwin. · View Herald Transcript
zzag requested review of this revision.Apr 30 2019, 10:02 AM
zzag retitled this revision from Switch to the next tabbox item before currently highlighted client is removed from stacking order to Don't crash when highlighted tabbox client is closed.Apr 30 2019, 10:53 AM
davidedmundson accepted this revision.May 2 2019, 10:21 PM
This revision is now accepted and ready to land.May 2 2019, 10:21 PM
This revision was automatically updated to reflect the committed changes.