kwin/autotests/integration
Martin Flöser e0f95fd913 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.

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
2017-09-07 19:06:54 +02:00
..
data
effects
helper
scripting
activities_test.cpp
CMakeLists.txt
debug_console_test.cpp
decoration_input_test.cpp
desktop_window_x11_test.cpp
dont_crash_aurorae_destroy_deco.cpp
dont_crash_cancel_animation.cpp
dont_crash_empty_deco.cpp
dont_crash_glxgears.cpp
dont_crash_no_border.cpp
dont_crash_useractions_menu.cpp
generic_scene_opengl_test.cpp
generic_scene_opengl_test.h
globalshortcuts_test.cpp
input_stacking_order.cpp
internal_window.cpp Delay syncing internal window geometry to end of cycle 2017-09-07 19:06:54 +02:00
keyboard_layout_test.cpp
keymap_creation_failure_test.cpp
kwin_wayland_test.cpp
kwin_wayland_test.h
kwinbindings_test.cpp
lockscreen.cpp
maximize_test.cpp
modifier_only_shortcut_test.cpp
move_resize_window_test.cpp
no_xdg_runtime_dir_test.cpp
plasma_surface_test.cpp
plasmawindow_test.cpp
platformcursor.cpp
pointer_constraints_test.cpp
pointer_input.cpp
quick_tiling_test.cpp
scene_opengl_es_test.cpp
scene_opengl_test.cpp
scene_qpainter_test.cpp
screen_changes_test.cpp
screenedge_client_show_test.cpp
shade_test.cpp
shell_client_test.cpp
showing_desktop_test.cpp
start_test.cpp
struts_test.cpp
tabbox_test.cpp
test_helpers.cpp
touch_input_test.cpp
transient_no_input_test.cpp
transient_placement.cpp
window_rules_test.cpp
window_selection_test.cpp
x11_client_test.cpp
xclipboardsync_test.cpp
xwayland_input_test.cpp