[Patch resend] server: Release of related atoms when destroying a window class

Ralf Habacker ralf.habacker at freenet.de
Mon Nov 26 08:30:59 CST 2018


-------------- next part --------------
From c99e86301e2fbf2fb4bfd760da5b1e692b851fb8 Mon Sep 17 00:00:00 2001
From: Ralf Habacker <ralf.habacker at freenet.de>
Date: Mon, 26 Nov 2018 13:14:01 +0100
Subject: [Patch resend] server: Release of related atoms when destroying a window class

According to the Windows API, UnregisterClass() releases the
corresponding atom, which has not been implemented in wine yet.

This commit adds a test to check if the corresponding atom is
released after calling UnregisterClass(). It cannot be submitted
as separate commit because it would fail without the base patch.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46180
Signed-off-by: Ralf Habacker <ralf.habacker at freenet.de>
---
 dlls/user32/tests/class.c | 3 +++
 server/class.c            | 2 ++
 2 files changed, 5 insertions(+)

diff --git a/dlls/user32/tests/class.c b/dlls/user32/tests/class.c
index d6910d982d..1d61b0ad5e 100644
--- a/dlls/user32/tests/class.c
+++ b/dlls/user32/tests/class.c
@@ -230,6 +230,9 @@ static void ClassTest(HINSTANCE hInstance, BOOL global)
     ok(UnregisterClassW(className, hInstance),
         "UnregisterClass() failed\n");
 
+    char buffer[1024];
+    ok(GetClipboardFormatNameW(classatom, str, ARRAY_SIZE(str)) == 0),
+        "UnregisterClass() failed - unable to unregister atom\n");
     return;
 }
 
diff --git a/server/class.c b/server/class.c
index 403180db79..b8240bd568 100644
--- a/server/class.c
+++ b/server/class.c
@@ -76,6 +76,8 @@ static struct window_class *create_class( struct process *process, int extra_byt
 
 static void destroy_class( struct window_class *class )
 {
+    release_global_atom( NULL, class->atom );
+    release_global_atom( NULL, class->base_atom );
     list_remove( &class->entry );
     release_object( class->process );
     free( class );
-- 
2.13.7



More information about the wine-devel mailing list