Jacek Caban : ole32: Don' t try to unregister window class if it was never registered.

Alexandre Julliard julliard at winehq.org
Mon Jun 4 16:26:23 CDT 2018


Module: wine
Branch: master
Commit: fd67e394e69ec59a23ca89ce729d1d72a61954ce
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=fd67e394e69ec59a23ca89ce729d1d72a61954ce

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jun  1 20:51:24 2018 +0200

ole32: Don't try to unregister window class if it was never registered.

UnregisterClass may load display driver, which is may be problematic
inside DLL_PROCESS_DETACH (esp. in Android drivers, which imports ole32
itself).

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ole32/compobj.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index a9e94c5..fb69a66 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -479,6 +479,8 @@ struct apartment_loaded_dll
 
 static const WCHAR wszAptWinClass[] = {'O','l','e','M','a','i','n','T','h','r','e','a','d','W','n','d','C','l','a','s','s',0};
 
+static ATOM apt_win_class;
+
 /*****************************************************************************
  * This section contains OpenDllList implementation
  */
@@ -1695,7 +1697,7 @@ static BOOL WINAPI register_class( INIT_ONCE *once, void *param, void **context
     wclass.lpfnWndProc = apartment_wndproc;
     wclass.hInstance = hProxyDll;
     wclass.lpszClassName = wszAptWinClass;
-    RegisterClassW(&wclass);
+    apt_win_class = RegisterClassW(&wclass);
     return TRUE;
 }
 
@@ -5270,7 +5272,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID reserved)
     case DLL_PROCESS_DETACH:
         if (reserved) break;
         release_std_git();
-        UnregisterClassW( wszAptWinClass, hProxyDll );
+        if(apt_win_class)
+            UnregisterClassW( (const WCHAR*)MAKEINTATOM(apt_win_class), hProxyDll );
         RPC_UnregisterAllChannelHooks();
         COMPOBJ_DllList_Free();
         DeleteCriticalSection(&csRegisteredClassList);




More information about the wine-cvs mailing list