Make the ugly detailed leak-spray on rustc failures optional.

This commit is contained in:
Graydon Hoare 2010-11-30 17:10:51 -08:00
parent 45043374ff
commit 4dc98e54d1
2 changed files with 22 additions and 7 deletions

View File

@ -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:
//

View File

@ -19,6 +19,7 @@ private:
memory_region *_parent;
size_t _live_allocations;
array_list<void *> _allocation_list;
const bool _detailed_leaks;
const bool _synchronized;
lock_and_signal _lock;
public: