mirror of
https://git.proxmox.com/git/libgit2
synced 2025-08-03 12:57:35 +00:00
Attempt to fix Windows TLS memory leak.
This commit is contained in:
parent
c332bb70cd
commit
55c5f756d8
18
src/global.c
18
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;
|
||||
}
|
||||
|
@ -32,4 +32,6 @@ typedef void (*git_global_shutdown_fn)(void);
|
||||
|
||||
extern void git__on_shutdown(git_global_shutdown_fn callback);
|
||||
|
||||
extern void git__free_thread_global_state(void);
|
||||
|
||||
#endif
|
||||
|
@ -20,6 +20,8 @@ static DWORD WINAPI git_win32__threadproc(LPVOID lpParameter)
|
||||
|
||||
thread->result = thread->proc(thread->param);
|
||||
|
||||
git__free_thread_global_state();
|
||||
|
||||
return CLEAN_THREAD_EXIT;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user