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