Jacek Caban : user32: Destroy window server objects from destroy_thread_windows.
Alexandre Julliard
julliard at winehq.org
Thu Feb 10 16:10:30 CST 2022
Module: wine
Branch: master
Commit: 6366694d2b12c3227f303f6b2edd6b4efe106bb3
URL: https://source.winehq.org/git/wine.git/?a=commit;h=6366694d2b12c3227f303f6b2edd6b4efe106bb3
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Feb 10 14:59:09 2022 +0100
user32: Destroy window server objects from destroy_thread_windows.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/win.c | 9 +++++++++
server/window.c | 9 +++++++--
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/dlls/user32/win.c b/dlls/user32/win.c
index 5e42872ed7a..82975cadd23 100644
--- a/dlls/user32/win.c
+++ b/dlls/user32/win.c
@@ -1216,6 +1216,15 @@ void destroy_thread_windows(void)
win->obj.handle = *free_list_ptr;
free_list_ptr = (WND **)&win->obj.handle;
}
+ if (free_list)
+ {
+ SERVER_START_REQ( destroy_window )
+ {
+ req->handle = 0; /* destroy all thread windows */
+ wine_server_call( req );
+ }
+ SERVER_END_REQ;
+ }
USER_Unlock();
while ((win = free_list))
diff --git a/server/window.c b/server/window.c
index ec8ee2f1790..6b889df9149 100644
--- a/server/window.c
+++ b/server/window.c
@@ -2101,8 +2101,13 @@ DECL_HANDLER(set_parent)
/* destroy a window */
DECL_HANDLER(destroy_window)
{
- struct window *win = get_window( req->handle );
- if (win)
+ struct window *win;
+
+ if (!req->handle)
+ {
+ destroy_thread_windows( current );
+ }
+ else if ((win = get_window( req->handle )))
{
if (!is_desktop_window(win)) free_window_handle( win );
else if (win->thread == current) detach_window_thread( win );
More information about the wine-cvs
mailing list