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