summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2016-06-07 12:55:17 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2016-10-01 17:40:37 +0200
commitd1fb89dd2f28663192386236a912e7c3d30fa2a2 (patch)
treecda0a5ae9ee8b716b0fbf99ec4dc71fbb5aedffb
parent6e0d473bee5f7dcc142c7d2542d24e5a402611fa (diff)
downloadlibgit2-d1fb89dd2f28663192386236a912e7c3d30fa2a2.tar.gz
global: clean up crt only after freeing tls data
The thread local storage is used to hold some global state that is dynamically allocated and should be freed upon exit. On Windows, we clean up the C run-time right after execution of registered shutdown callbacks and before cleaning up the TLS. When we clean up the CRT, we also cause it to analyze for memory leaks. As we did not free the TLS yet this will lead to false positives. Fix the issue by first freeing the TLS and cleaning up the CRT only afterwards.
-rw-r--r--src/global.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/global.c b/src/global.c
index 967944fa1..603135e07 100644
--- a/src/global.c
+++ b/src/global.c
@@ -85,11 +85,6 @@ static void shutdown_common(void)
git__free(git__user_agent);
git__free(git__ssl_ciphers);
-
-#if defined(GIT_MSVC_CRTDBG)
- git_win32__crtdbg_stacktrace_cleanup();
- git_win32__stack_cleanup();
-#endif
}
/**
@@ -181,6 +176,11 @@ int git_libgit2_shutdown(void)
TlsFree(_tls_index);
git_mutex_free(&git__mwindow_mutex);
+
+#if defined(GIT_MSVC_CRTDBG)
+ git_win32__crtdbg_stacktrace_cleanup();
+ git_win32__stack_cleanup();
+#endif
}
/* Exit the lock */