Rob Shearman : msvcrt: Free memory allocated in TLS slot on module unload as well as thread exit.
Alexandre Julliard
julliard at winehq.org
Mon Dec 14 09:51:26 CST 2009
Module: wine
Branch: master
Commit: c20868e0a2f7af909cf8af2877ae8b024fa6d11e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c20868e0a2f7af909cf8af2877ae8b024fa6d11e
Author: Rob Shearman <robertshearman at gmail.com>
Date: Mon Dec 14 14:13:57 2009 +0000
msvcrt: Free memory allocated in TLS slot on module unload as well as thread exit.
---
dlls/msvcrt/main.c | 27 +++++++++++++++------------
1 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/dlls/msvcrt/main.c b/dlls/msvcrt/main.c
index b42b64a..e64f0ba 100644
--- a/dlls/msvcrt/main.c
+++ b/dlls/msvcrt/main.c
@@ -60,13 +60,24 @@ static inline BOOL msvcrt_free_tls(void)
return TRUE;
}
+static inline void msvcrt_free_tls_mem(void)
+{
+ thread_data_t *tls = TlsGetValue(msvcrt_tls_index);
+ if (tls)
+ {
+ HeapFree(GetProcessHeap(),0,tls->efcvt_buffer);
+ HeapFree(GetProcessHeap(),0,tls->asctime_buffer);
+ HeapFree(GetProcessHeap(),0,tls->wasctime_buffer);
+ HeapFree(GetProcessHeap(),0,tls->strerror_buffer);
+ }
+ HeapFree(GetProcessHeap(), 0, tls);
+}
+
/*********************************************************************
* Init
*/
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
- thread_data_t *tls;
-
TRACE("(%p, %s, %p) pid(%x), tid(%x), tls(%u)\n",
hinstDLL, msvcrt_get_reason(fdwReason), lpvReserved,
GetCurrentProcessId(), GetCurrentThreadId(),
@@ -94,21 +105,13 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
msvcrt_free_console();
msvcrt_free_args();
msvcrt_free_signals();
+ msvcrt_free_tls_mem();
if (!msvcrt_free_tls())
return FALSE;
TRACE("finished process free\n");
break;
case DLL_THREAD_DETACH:
- /* Free TLS */
- tls = TlsGetValue(msvcrt_tls_index);
- if (tls)
- {
- HeapFree(GetProcessHeap(),0,tls->efcvt_buffer);
- HeapFree(GetProcessHeap(),0,tls->asctime_buffer);
- HeapFree(GetProcessHeap(),0,tls->wasctime_buffer);
- HeapFree(GetProcessHeap(),0,tls->strerror_buffer);
- }
- HeapFree(GetProcessHeap(), 0, tls);
+ msvcrt_free_tls_mem();
TRACE("finished thread free\n");
break;
}
More information about the wine-cvs
mailing list