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:
44
globals.c
44
globals.c
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user