uxtheme: Avoid memory leaks.

A THEME_FILE struct and four global ATOMs are leaked when unloading uxtheme.

Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zhiyi Zhang 2021-07-05 20:33:49 +08:00 committed by Alexandre Julliard
parent b5abd53494
commit 6f00a2983a
3 changed files with 17 additions and 2 deletions

View File

@ -31,14 +31,18 @@ WINE_DEFAULT_DEBUG_CHANNEL(uxtheme);
/***********************************************************************/
/* For the moment, do nothing here. */
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, void *reserved)
{
TRACE("%p 0x%x %p\n", hInstDLL, fdwReason, lpv);
TRACE("%p 0x%x %p\n", hInstDLL, fdwReason, reserved);
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hInstDLL);
UXTHEME_InitSystem(hInstDLL);
break;
case DLL_PROCESS_DETACH:
if (reserved) break;
UXTHEME_UninitSystem();
break;
}
return TRUE;
}

View File

@ -509,6 +509,16 @@ void UXTHEME_InitSystem(HINSTANCE hInst)
UXTHEME_LoadTheme();
}
void UXTHEME_UninitSystem(void)
{
MSSTYLES_SetActiveTheme(NULL, FALSE);
GlobalDeleteAtom(atWindowTheme);
GlobalDeleteAtom(atSubAppName);
GlobalDeleteAtom(atSubIdList);
GlobalDeleteAtom(atDialogThemeEnabled);
}
/***********************************************************************
* IsAppThemed (UXTHEME.@)
*/

View File

@ -95,6 +95,7 @@ HRESULT WINAPI ParseThemeIniFile(LPCWSTR pszIniFileName, LPWSTR pszUnknown,
ParseThemeIniFileProc callback, LPVOID lpData) DECLSPEC_HIDDEN;
extern void UXTHEME_InitSystem(HINSTANCE hInst) DECLSPEC_HIDDEN;
extern void UXTHEME_UninitSystem(void) DECLSPEC_HIDDEN;
/* No alpha blending */
#define ALPHABLEND_NONE 0