Commit 521aa8c1 by Edward Thomson

win32: teach the allocator to deal with crtdbg

Move the MSVC C runtime debugging bits into the allocator's global init
function.
parent fe12423a
...@@ -10,6 +10,11 @@ ...@@ -10,6 +10,11 @@
#include "allocators/stdalloc.h" #include "allocators/stdalloc.h"
#include "allocators/win32_crtdbg.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; git_allocator git__allocator;
static int setup_default_allocator(void) static int setup_default_allocator(void)
...@@ -21,8 +26,23 @@ static int setup_default_allocator(void) ...@@ -21,8 +26,23 @@ static int setup_default_allocator(void)
#endif #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) 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 * We don't want to overwrite any allocator which has been set before
* the init function is called. * the init function is called.
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#if defined(GIT_MSVC_CRTDBG) #if defined(GIT_MSVC_CRTDBG)
#include "win32/w32_stack.h"
#include "win32/w32_crtdbg_stacktrace.h" #include "win32/w32_crtdbg_stacktrace.h"
static void *crtdbg__malloc(size_t len, const char *file, int line) static void *crtdbg__malloc(size_t len, const char *file, int line)
......
...@@ -19,11 +19,7 @@ ...@@ -19,11 +19,7 @@
#include "thread-utils.h" #include "thread-utils.h"
#include "git2/global.h" #include "git2/global.h"
#include "transports/ssh.h" #include "transports/ssh.h"
#if defined(GIT_MSVC_CRTDBG)
#include "win32/w32_stack.h" #include "win32/w32_stack.h"
#include "win32/w32_crtdbg_stacktrace.h"
#endif
git_mutex git__mwindow_mutex; git_mutex git__mwindow_mutex;
...@@ -72,12 +68,6 @@ static int init_common(void) ...@@ -72,12 +68,6 @@ static int init_common(void)
size_t i; size_t i;
int ret; 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 */ /* Initialize subsystems that have global state */
for (i = 0; i < ARRAY_SIZE(git__init_callbacks); i++) for (i = 0; i < ARRAY_SIZE(git__init_callbacks); i++)
if ((ret = git__init_callbacks[i]()) != 0) if ((ret = git__init_callbacks[i]()) != 0)
...@@ -200,11 +190,6 @@ int git_libgit2_shutdown(void) ...@@ -200,11 +190,6 @@ int git_libgit2_shutdown(void)
FlsFree(_fls_index); FlsFree(_fls_index);
git_mutex_free(&git__mwindow_mutex); git_mutex_free(&git__mwindow_mutex);
#if defined(GIT_MSVC_CRTDBG)
git_win32__crtdbg_stacktrace_cleanup();
git_win32__stack_cleanup();
#endif
} }
/* Exit the lock */ /* Exit the lock */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment