summaryrefslogtreecommitdiff
path: root/src/global.c
diff options
context:
space:
mode:
authorJeff Hostetler <jeffhostetler@me.com>2015-06-09 14:38:30 -0700
committerJeff Hostetler <jeffhost@microsoft.com>2015-06-29 16:39:11 -0400
commit93b42728952487941bc2b0b78a7f0080b7b3d600 (patch)
tree40acaef6813719257a32835e1b962832964ba713 /src/global.c
parent4a0313bc4e9b20a55aa6d0922312f97df743df72 (diff)
downloadlibgit2-93b42728952487941bc2b0b78a7f0080b7b3d600.tar.gz
Include stacktrace summary in memory leak output.
Diffstat (limited to 'src/global.c')
-rw-r--r--src/global.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/global.c b/src/global.c
index 3f20bfd31..fc6337adc 100644
--- a/src/global.c
+++ b/src/global.c
@@ -11,7 +11,10 @@
#include "git2/global.h"
#include "git2/sys/openssl.h"
#include "thread-utils.h"
-
+#if defined(GIT_MSVC_CRTDBG)
+#include "win32/w32_stack.h"
+#include "win32/w32_crtdbg_stacktrace.h"
+#endif
git_mutex git__mwindow_mutex;
@@ -225,6 +228,11 @@ int git_libgit2_init(void)
/* Only do work on a 0 -> 1 transition of the refcount */
if ((ret = git_atomic_inc(&git__n_inits)) == 1) {
+#if defined(GIT_MSVC_CRTDBG)
+ git_win32__crtdbg_stacktrace_init();
+ git_win32__stack_init();
+#endif
+
if (synchronized_threads_init() < 0)
ret = -1;
}
@@ -254,9 +262,15 @@ int git_libgit2_shutdown(void)
while (InterlockedCompareExchange(&_mutex, 1, 0)) { Sleep(0); }
/* Only do work on a 1 -> 0 transition of the refcount */
- if ((ret = git_atomic_dec(&git__n_inits)) == 0)
+ if ((ret = git_atomic_dec(&git__n_inits)) == 0) {
synchronized_threads_shutdown();
+#if defined(GIT_MSVC_CRTDBG)
+ git_win32__crtdbg_stacktrace_cleanup();
+ git_win32__stack_cleanup();
+#endif
+ }
+
/* Exit the lock */
InterlockedExchange(&_mutex, 0);