https://bugs.kde.org/show_bug.cgi?id=384441

Martin Flöser <mgraess...@kde.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
      Latest Commit|                            |https://commits.kde.org/kwi
                   |                            |n/e0f95fd913b6e7c9106ca153c
                   |                            |0dd1e3d46c9e297
         Resolution|---                         |FIXED

--- Comment #2 from Martin Flöser <mgraess...@kde.org> ---
Git commit e0f95fd913b6e7c9106ca153c0dd1e3d46c9e297 by Martin Flöser.
Committed on 07/09/2017 at 17:06.
Pushed by graesslin into branch 'master'.

Delay syncing internal window geometry to end of cycle

Summary:
The syncing of the window geometry to the internal geometry can
unfortunately cause a freeze in very special conditions:
1. create QML component
2. a Plasma::Dialog gets created
3. It creates the DialogShadows
4. This triggers QGlobalStatic creation which locks a non-recursive
mutex
5. The creation of DialogShadows creates a Registry and triggers a
roundtrip on the Wayland server
6. KWin processes all Wayland events
7. This triggers the creation of a ShellClient
8. The ShellClient has a PlasmaShellSurface which requested a position
9. The new geometry does not match the geometry of the Plasma::Dialog
10. ShellClient syncs the geometry to the Plasma::Dialog
11. Plasma::Dialog updates the theme because window geometry changed
12. This accesses the DialogShadows...

which is still in the non recursive mutex and we have a freeze.

By delaying the sync to the end of cycle we jump out of this deadly
sequence.

Test Plan:
The freeze doesn't hit any more. It's possible that some test
cases need adjustments.

Reviewers: #kwin, #plasma

Subscribers: plasma-devel, kwin

Tags: #kwin

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

M  +3    -3    autotests/integration/internal_window.cpp
M  +2    -1    shell_client.cpp

https://commits.kde.org/kwin/e0f95fd913b6e7c9106ca153c0dd1e3d46c9e297

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to