From: Jeff Hostetler <jeffh...@microsoft.com>

MS Visual C comes with a few neat features we can use to analyze the
heap consumption (i.e. leaks, max memory, etc).

With this patch, we introduce support via the build-time flag
`USE_MSVC_CRTDBG`.

Signed-off-by: Jeff Hostetler <jeffh...@microsoft.com>
Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
---
 compat/mingw.c    | 6 ++++++
 config.mak.uname  | 4 ++++
 git-compat-util.h | 9 +++++++++
 3 files changed, 19 insertions(+)

diff --git a/compat/mingw.c b/compat/mingw.c
index c063ae62be..667285887a 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -2411,6 +2411,12 @@ int wmain(int argc, const wchar_t **wargv)
 
        trace2_initialize_clock();
 
+#ifdef _MSC_VER
+#ifdef USE_MSVC_CRTDBG
+       _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
+#endif
+#endif
+
        maybe_redirect_std_handles();
 
        /* determine size of argv and environ conversion buffer */
diff --git a/config.mak.uname b/config.mak.uname
index b8c52e49d2..3fde48c64d 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -448,6 +448,10 @@ else
 endif
        BASIC_CFLAGS += $(sdk_libs) $(msvc_libs)
 
+ifneq ($(USE_MSVC_CRTDBG),)
+       # Optionally enable memory leak reporting.
+       BASIC_CFLAGS += -DUSE_MSVC_CRTDBG
+endif
        BASIC_CFLAGS += -DPROTECT_NTFS_DEFAULT=1
        # Always give "-Zi" to the compiler and "-debug" to linker (even in
        # release mode) to force a PDB to be generated (like RelWithDebInfo).
diff --git a/git-compat-util.h b/git-compat-util.h
index cc0e7e9733..83be89de0a 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -1,6 +1,15 @@
 #ifndef GIT_COMPAT_UTIL_H
 #define GIT_COMPAT_UTIL_H
 
+#ifdef USE_MSVC_CRTDBG
+/*
+ * For these to work they must appear very early in each
+ * file -- before most of the standard header files.
+ */
+#include <stdlib.h>
+#include <crtdbg.h>
+#endif
+
 #define _FILE_OFFSET_BITS 64
 
 
-- 
gitgitgadget

Reply via email to