[PATCH 0/1] MR264: winex11.drv: Always call XSync() in destroy_whole_window() if there is client window.
XSync() is already called when there is a whole window only. When GL child window is deleted shortly after resize X error (request code 12, which is X_ConfigureWindow) may happen. XConfigureWindow is called for child window from sync_client_position. Then, destroy_whole_window() doesn't hit XSync() path because there is no whole_window. client_window is destroyed from opengl.c:release_gl_drawable() independently (that may happen right from X11DRV_DestroyWindow() or later if the drawable is still referenced elsewhere) and that may happen before XConfigureWindow request is processed. We can't flush in release_gl_drawable() as window data is unavailable at that moment and it is unknown which display to flush. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/264
From: Paul Gofman <pgofman(a)codeweavers.com> Signed-off-by: Paul Gofman <pgofman(a)codeweavers.com> --- dlls/winex11.drv/window.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 3ebbee0856e..1c24cc1d2e3 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -1650,6 +1650,8 @@ static void destroy_whole_window( struct x11drv_win_data *data, BOOL already_des } return; } + if (data->client_window && !already_destroyed) + XSync( data->display, False ); } else { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/264
participants (2)
-
Paul Gofman -
Paul Gofman (@gofman)