summaryrefslogtreecommitdiff
path: root/src/global.c
diff options
context:
space:
mode:
authorJeff Hostetler <jeffhost@microsoft.com>2015-04-17 09:30:22 -0400
committerJeff Hostetler <jeffhost@microsoft.com>2015-04-17 09:30:22 -0400
commit55c5f756d80cb762fa21054c7460359424428668 (patch)
tree6c2f1fe3f56d9541a8be180c64253fc2d856db2e /src/global.c
parentc332bb70cdf02f202f783485819f65feca953550 (diff)
downloadlibgit2-55c5f756d80cb762fa21054c7460359424428668.tar.gz
Attempt to fix Windows TLS memory leak.
Diffstat (limited to 'src/global.c')
-rw-r--r--src/global.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/global.c b/src/global.c
index 1f3432d09..3c97e62e6 100644
--- a/src/global.c
+++ b/src/global.c
@@ -270,13 +270,21 @@ git_global_st *git__global_state(void)
return ptr;
}
+void git__free_thread_global_state(void)
+{
+ void *ptr = TlsGetValue(_tls_index);
+ if (!ptr)
+ return;
+
+ git__global_state_cleanup(ptr);
+ git__free(ptr);
+ TlsSetValue(_tls_index, NULL);
+}
+
BOOL WINAPI DllMain(HINSTANCE dll, DWORD reason, LPVOID reserved)
{
- if (reason == DLL_THREAD_DETACH) {
- void *ptr = TlsGetValue(_tls_index);
- git__global_state_cleanup(ptr);
- git__free(ptr);
- }
+ if (reason == DLL_THREAD_DETACH)
+ git__free_thread_global_state();
return TRUE;
}