diff options
-rw-r--r-- | include/git2/common.h | 3 | ||||
-rw-r--r-- | src/alloc.c | 18 |
2 files changed, 15 insertions, 6 deletions
diff --git a/include/git2/common.h b/include/git2/common.h index a14e0961e..152e23aae 100644 --- a/include/git2/common.h +++ b/include/git2/common.h @@ -364,7 +364,8 @@ typedef enum { * * > Set the memory allocator to a different memory allocator. This * > allocator will then be used to make all memory allocations for - * > libgit2 operations. + * > libgit2 operations. If the given `allocator` is NULL, then the + * > system default will be restored. * * opts(GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY, int enabled) * diff --git a/src/alloc.c b/src/alloc.c index d4e6f1ebd..0cac457d4 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -15,6 +15,15 @@ git_allocator git__allocator; +static int setup_default_allocator(void) +{ +#if defined(GIT_MSVC_CRTDBG) + return git_win32_crtdbg_init_allocator(&git__allocator); +#else + return git_stdalloc_init_allocator(&git__allocator); +#endif +} + int git_allocator_global_init(void) { /* @@ -24,15 +33,14 @@ int git_allocator_global_init(void) if (git__allocator.gmalloc != NULL) return 0; -#if defined(GIT_MSVC_CRTDBG) - return git_win32_crtdbg_init_allocator(&git__allocator); -#else - return git_stdalloc_init_allocator(&git__allocator); -#endif + return setup_default_allocator(); } int git_allocator_setup(git_allocator *allocator) { + if (!allocator) + return setup_default_allocator(); + memcpy(&git__allocator, allocator, sizeof(*allocator)); return 0; } |