1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2026-01-26 21:41:34 +03:00

globals: Fix memory leak on Windows DLL unload

Thread-local memory must be freed for the main thread as well after
4f08a1a2.

Fixes #925.
This commit is contained in:
Nick Wellnhofer
2025-05-26 15:34:48 +02:00
parent ab06bfa1f6
commit b79cf4743b

View File

@@ -791,34 +791,34 @@ DllMain(ATTRIBUTE_UNUSED HINSTANCE hinstDLL, DWORD fdwReason,
ATTRIBUTE_UNUSED LPVOID lpvReserved)
#endif
{
switch (fdwReason) {
case DLL_THREAD_DETACH:
if ((fdwReason == DLL_THREAD_DETACH) ||
(fdwReason == DLL_PROCESS_DETACH)) {
#ifdef USE_TLS
xmlFreeGlobalState(&globalState);
xmlFreeGlobalState(&globalState);
#else
if (globalkey != TLS_OUT_OF_INDEXES) {
xmlGlobalState *globalval;
if (globalkey != TLS_OUT_OF_INDEXES) {
xmlGlobalState *globalval;
globalval = (xmlGlobalState *) TlsGetValue(globalkey);
if (globalval) {
xmlFreeGlobalState(globalval);
TlsSetValue(globalkey, NULL);
}
globalval = (xmlGlobalState *) TlsGetValue(globalkey);
if (globalval) {
xmlFreeGlobalState(globalval);
TlsSetValue(globalkey, NULL);
}
#endif
break;
#ifndef LIBXML_THREAD_ALLOC_ENABLED
case DLL_PROCESS_DETACH:
if (xmlFree == free)
xmlCleanupParser();
if (globalkey != TLS_OUT_OF_INDEXES) {
TlsFree(globalkey);
globalkey = TLS_OUT_OF_INDEXES;
}
break;
}
#endif
}
#ifndef LIBXML_THREAD_ALLOC_ENABLED
if (fdwReason == DLL_PROCESS_DETACH) {
if (xmlFree == free)
xmlCleanupParser();
if (globalkey != TLS_OUT_OF_INDEXES) {
TlsFree(globalkey);
globalkey = TLS_OUT_OF_INDEXES;
}
}
#endif
return TRUE;
}
#endif /* USE_DLL_MAIN */