summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2020-05-12 13:21:26 +0100
committerEdward Thomson <ethomson@edwardthomson.com>2020-10-11 14:42:19 +0100
commit521aa8c1c04c25a57b82e1279a4e91d8a07436aa (patch)
treecc717e7a2abc6a01fdbf06e36d4888a0df8d7921
parentfe12423a91015e6116773340a8936fece3251339 (diff)
downloadlibgit2-521aa8c1c04c25a57b82e1279a4e91d8a07436aa.tar.gz
win32: teach the allocator to deal with crtdbg
Move the MSVC C runtime debugging bits into the allocator's global init function.
-rw-r--r--src/alloc.c20
-rw-r--r--src/allocators/win32_crtdbg.c1
-rw-r--r--src/global.c15
3 files changed, 21 insertions, 15 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 51c4d8029..7bfbbdaa8 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -10,6 +10,11 @@
#include "allocators/stdalloc.h"
#include "allocators/win32_crtdbg.h"
+#if defined(GIT_MSVC_CRTDBG)
+# include "win32/w32_stack.h"
+# include "win32/w32_crtdbg_stacktrace.h"
+#endif
+
git_allocator git__allocator;
static int setup_default_allocator(void)
@@ -21,8 +26,23 @@ static int setup_default_allocator(void)
#endif
}
+#if defined(GIT_MSVC_CRTDBG)
+static void allocator_global_shutdown(void)
+{
+ git_win32__crtdbg_stacktrace_cleanup();
+ git_win32__stack_cleanup();
+}
+#endif
+
int git_allocator_global_init(void)
{
+#if defined(GIT_MSVC_CRTDBG)
+ git_win32__crtdbg_stacktrace_init();
+ git_win32__stack_init();
+
+ git__on_shutdown(allocator_global_shutdown);
+#endif
+
/*
* We don't want to overwrite any allocator which has been set before
* the init function is called.
diff --git a/src/allocators/win32_crtdbg.c b/src/allocators/win32_crtdbg.c
index 1187e2fcd..c726268a8 100644
--- a/src/allocators/win32_crtdbg.c
+++ b/src/allocators/win32_crtdbg.c
@@ -9,6 +9,7 @@
#if defined(GIT_MSVC_CRTDBG)
+#include "win32/w32_stack.h"
#include "win32/w32_crtdbg_stacktrace.h"
static void *crtdbg__malloc(size_t len, const char *file, int line)
diff --git a/src/global.c b/src/global.c
index 4abb5e387..d2a25a504 100644
--- a/src/global.c
+++ b/src/global.c
@@ -19,11 +19,7 @@
#include "thread-utils.h"
#include "git2/global.h"
#include "transports/ssh.h"
-
-#if defined(GIT_MSVC_CRTDBG)
#include "win32/w32_stack.h"
-#include "win32/w32_crtdbg_stacktrace.h"
-#endif
git_mutex git__mwindow_mutex;
@@ -72,12 +68,6 @@ static int init_common(void)
size_t i;
int ret;
- /* Initialize the CRT debug allocator first, before our first malloc */
-#if defined(GIT_MSVC_CRTDBG)
- git_win32__crtdbg_stacktrace_init();
- git_win32__stack_init();
-#endif
-
/* Initialize subsystems that have global state */
for (i = 0; i < ARRAY_SIZE(git__init_callbacks); i++)
if ((ret = git__init_callbacks[i]()) != 0)
@@ -200,11 +190,6 @@ int git_libgit2_shutdown(void)
FlsFree(_fls_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 */