Skip to content
  • Martin Flöser's avatar
    Delay syncing internal window geometry to end of cycle · e0f95fd9
    Martin Flöser authored
    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.
    
    BUG: 384441
    
    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
    e0f95fd9