[Bf-blender-cvs] [62f2925e438] master: Fix T80774: (correction) keep MEM_init_memleak_detection call early
Campbell Barton
noreply at git.blender.org
Tue Sep 15 05:33:44 CEST 2020
Commit: 62f2925e438fae25f0dab615a7932774586669f3
Author: Campbell Barton
Date: Tue Sep 15 13:23:06 2020 +1000
Branches: master
https://developer.blender.org/rB62f2925e438fae25f0dab615a7932774586669f3
Fix T80774: (correction) keep MEM_init_memleak_detection call early
===================================================================
M intern/guardedalloc/MEM_guardedalloc.h
M intern/guardedalloc/intern/leak_detector.cc
M source/creator/creator.c
===================================================================
diff --git a/intern/guardedalloc/MEM_guardedalloc.h b/intern/guardedalloc/MEM_guardedalloc.h
index 71d3c512306..78e629a6971 100644
--- a/intern/guardedalloc/MEM_guardedalloc.h
+++ b/intern/guardedalloc/MEM_guardedalloc.h
@@ -215,6 +215,12 @@ extern const char *(*MEM_name_ptr)(void *vmemh);
* about memory leaks will be printed on exit. */
void MEM_init_memleak_detection(void);
+/**
+ * Use this if we want to call #exit during argument parsing for example,
+ * without having to free all data.
+ */
+void MEM_use_memleak_detection(bool enabled);
+
/** When this has been called and memory leaks have been detected, the process will have an exit
* code that indicates failure. This can be used for when checking for memory leaks with automated
* tests. */
diff --git a/intern/guardedalloc/intern/leak_detector.cc b/intern/guardedalloc/intern/leak_detector.cc
index 0ecf2ed8ba7..fb8d4e72cac 100644
--- a/intern/guardedalloc/intern/leak_detector.cc
+++ b/intern/guardedalloc/intern/leak_detector.cc
@@ -32,11 +32,15 @@ char free_after_leak_detection_message[] =
namespace {
bool fail_on_memleak = false;
+bool ignore_memleak = false;
class MemLeakPrinter {
public:
~MemLeakPrinter()
{
+ if (ignore_memleak) {
+ return;
+ }
leak_detector_has_run = true;
const uint leaked_blocks = MEM_get_memory_blocks_in_use();
if (leaked_blocks == 0) {
@@ -74,6 +78,11 @@ void MEM_init_memleak_detection(void)
static MemLeakPrinter printer;
}
+void MEM_use_memleak_detection(bool enabled)
+{
+ ignore_memleak = !enabled;
+}
+
void MEM_enable_fail_on_memleak(void)
{
fail_on_memleak = true;
diff --git a/source/creator/creator.c b/source/creator/creator.c
index 68753366c7d..d2bfcb64b53 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -297,6 +297,7 @@ int main(int argc,
break;
}
}
+ MEM_init_memleak_detection();
}
#ifdef BUILD_DATE
@@ -399,6 +400,10 @@ int main(int argc,
main_args_setup(C, ba);
+ /* Begin argument parsing, ignore leaks so arguments that call #exit
+ * (such as '--version' & '--help') don't report leaks. */
+ MEM_use_memleak_detection(false);
+
BLI_argsParse(ba, 1, NULL, NULL);
main_signal_setup();
@@ -499,9 +504,8 @@ int main(int argc,
callback_main_atexit(&app_init_data);
BKE_blender_atexit_unregister(callback_main_atexit, &app_init_data);
- /* Initialize memory leak detection after parsing command line arguments
- * so arguments that call #exit (such as '--version' & '--help') don't report leaks. */
- MEM_init_memleak_detection();
+ /* End argument parsing, allow memory leaks to be printed. */
+ MEM_use_memleak_detection(true);
/* Paranoid, avoid accidental re-use. */
#ifndef WITH_PYTHON_MODULE
More information about the Bf-blender-cvs
mailing list