From 4dc98e54d1191b5414e6e04367fd4e3d80311cfa Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Tue, 30 Nov 2010 17:10:51 -0800 Subject: [PATCH] Make the ugly detailed leak-spray on rustc failures optional. --- src/rt/memory_region.cpp | 28 +++++++++++++++++++++------- src/rt/memory_region.h | 1 + 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/rt/memory_region.cpp b/src/rt/memory_region.cpp index 2f841935c11..fb19620f8b9 100644 --- a/src/rt/memory_region.cpp +++ b/src/rt/memory_region.cpp @@ -5,12 +5,13 @@ memory_region::memory_region(rust_srv *srv, bool synchronized) : _srv(srv), _parent(NULL), _live_allocations(0), + _detailed_leaks(getenv("RUST_DETAILED_LEAKS") != NULL), _synchronized(synchronized) { - // Nop. } memory_region::memory_region(memory_region *parent) : _srv(parent->_srv), _parent(parent), _live_allocations(0), + _detailed_leaks(parent->_detailed_leaks), _synchronized(parent->_synchronized) { // Nop. } @@ -83,15 +84,28 @@ memory_region::~memory_region() { } char msg[128]; snprintf(msg, sizeof(msg), - "leaked memory in rust main loop (%" PRIuPTR " objects)", - _live_allocations); + "leaked memory in rust main loop (%" PRIuPTR " objects)", + _live_allocations); #ifdef TRACK_ALLOCATIONS - for (size_t i = 0; i < _allocation_list.size(); i++) { - if (_allocation_list[i] != NULL) { - printf("allocation 0x%" PRIxPTR " was not freed\n", - (uintptr_t) _allocation_list[i]); + if (_detailed_leaks) { + for (size_t i = 0; i < _allocation_list.size(); i++) { + if (_allocation_list[i] != NULL) { + printf("allocation 0x%" PRIxPTR " was not freed\n", + (uintptr_t) _allocation_list[i]); + } } } #endif _srv->fatal(msg, __FILE__, __LINE__, "%d objects", _live_allocations); } + +// +// Local Variables: +// mode: C++ +// fill-column: 78; +// indent-tabs-mode: nil +// c-basic-offset: 4 +// buffer-file-coding-system: utf-8-unix +// compile-command: "make -k -C .. 2>&1 | sed -e 's/\\/x\\//x:\\//g'"; +// End: +// diff --git a/src/rt/memory_region.h b/src/rt/memory_region.h index b62f0f51611..b483c60218c 100644 --- a/src/rt/memory_region.h +++ b/src/rt/memory_region.h @@ -19,6 +19,7 @@ private: memory_region *_parent; size_t _live_allocations; array_list _allocation_list; + const bool _detailed_leaks; const bool _synchronized; lock_and_signal _lock; public: