Skip to content

Commit

Permalink
win32: teach the allocator to deal with crtdbg
Browse files Browse the repository at this point in the history
Move the MSVC C runtime debugging bits into the allocator's global init
function.
  • Loading branch information
ethomson committed Oct 11, 2020
1 parent fe12423 commit 521aa8c
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 15 deletions.
20 changes: 20 additions & 0 deletions src/alloc.c
Expand Up @@ -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)
Expand All @@ -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.
Expand Down
1 change: 1 addition & 0 deletions src/allocators/win32_crtdbg.c
Expand Up @@ -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)
Expand Down
15 changes: 0 additions & 15 deletions src/global.c
Expand Up @@ -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;

Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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 */
Expand Down

0 comments on commit 521aa8c

Please sign in to comment.