diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2020-05-12 13:21:26 +0100 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2020-10-11 14:42:19 +0100 |
commit | 521aa8c1c04c25a57b82e1279a4e91d8a07436aa (patch) | |
tree | cc717e7a2abc6a01fdbf06e36d4888a0df8d7921 | |
parent | fe12423a91015e6116773340a8936fece3251339 (diff) | |
download | libgit2-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.c | 20 | ||||
-rw-r--r-- | src/allocators/win32_crtdbg.c | 1 | ||||
-rw-r--r-- | src/global.c | 15 |
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 */ |