From: Ralf Habacker Subject: [Patch resend] server: Release of related atoms when destroying a window class Message-Id: <5320153e-9fbb-a488-e989-d74cdc8cbaee@freenet.de> Date: Mon, 26 Nov 2018 15:30:59 +0100 From c99e86301e2fbf2fb4bfd760da5b1e692b851fb8 Mon Sep 17 00:00:00 2001 From: Ralf Habacker 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 --- 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