Jacek Caban : ole32: Don' t try to unregister window class if it was never registered.
Module: wine Branch: master Commit: fd67e394e69ec59a23ca89ce729d1d72a61954ce URL: https://source.winehq.org/git/wine.git/?a=commit;h=fd67e394e69ec59a23ca89ce7... Author: Jacek Caban <jacek(a)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(a)codeweavers.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)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);
participants (1)
-
Alexandre Julliard