Should help https://gitlab.winehq.org/wine/wine/-/merge_requests/6649 as well, to avoid leaking parent window either.
-- v3: win32u: Notify the drivers of destroyed windows on thread detach.
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/window.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index c48235cf90f..9f0a412740b 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -5170,7 +5170,7 @@ void destroy_thread_windows(void) if (win->tid != GetCurrentThreadId()) continue; free_dce( win->dce, win->obj.handle ); set_user_handle_ptr( handle, NULL ); - win->obj.handle = free_list; + win->userdata = (UINT_PTR)free_list; free_list = win; } if (free_list) @@ -5186,9 +5186,10 @@ void destroy_thread_windows(void)
while ((win = free_list)) { - free_list = win->obj.handle; + free_list = (WND *)win->userdata; TRACE( "destroying %p\n", win );
+ user_driver->pDestroyWindow( win->obj.handle ); vulkan_detach_surfaces( &win->vulkan_surfaces );
if ((win->dwStyle & (WS_CHILD | WS_POPUP)) != WS_CHILD && win->wIDmenu)
v3: Call the drivers DestroyWindow from win32u instead.