Navigation Menu

Skip to content

Commit

Permalink
rt: Print alloc backtraces for bad release_alloc with RUSTRT_TRACK_AL…
Browse files Browse the repository at this point in the history
…LOCATIONS

Probably the env var should be renamed from DETAILED_LEAKS but I'm leaving
aside that breaking change for now.
  • Loading branch information
Keegan McAllister committed Jul 17, 2013
1 parent dfa5595 commit 2d82d93
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 7 deletions.
18 changes: 11 additions & 7 deletions src/rt/memory_region.cpp
Expand Up @@ -34,6 +34,14 @@ void *memory_region::get_data(alloc_header *ptr) {
return (void*)((char *)ptr + HEADER_SIZE);
}

inline void memory_region::maybe_print_backtrace(const alloc_header *header) const {
# if RUSTRT_TRACK_ALLOCATIONS >= 3
if (_detailed_leaks) {
backtrace_symbols_fd(header->bt + 1, header->btframes - 1, 2);
}
# endif
}

memory_region::memory_region(bool synchronized,
bool detailed_leaks,
bool poison_on_free) :
Expand Down Expand Up @@ -174,13 +182,7 @@ memory_region::~memory_region() {
header->tag,
(uintptr_t) get_data(header));
++leak_count;

# if RUSTRT_TRACK_ALLOCATIONS >= 3
if (_detailed_leaks) {
backtrace_symbols_fd(header->bt + 1,
header->btframes - 1, 2);
}
# endif
maybe_print_backtrace(header);
}
}
assert(leak_count == _live_allocations);
Expand All @@ -206,11 +208,13 @@ memory_region::release_alloc(void *mem) {
if (((size_t) alloc->index) >= _allocation_list.size()) {
printf("free: ptr 0x%" PRIxPTR " (%s) index %d is beyond allocation_list of size %zu\n",
(uintptr_t) get_data(alloc), alloc->tag, alloc->index, _allocation_list.size());
maybe_print_backtrace(alloc);
assert(false && "index beyond allocation_list");
}
if (_allocation_list[alloc->index] != alloc) {
printf("free: ptr 0x%" PRIxPTR " (%s) is not in allocation_list\n",
(uintptr_t) get_data(alloc), alloc->tag);
maybe_print_backtrace(alloc);
assert(false && "not in allocation_list");
}
else {
Expand Down
2 changes: 2 additions & 0 deletions src/rt/memory_region.h
Expand Up @@ -69,6 +69,8 @@ class memory_region {
void release_alloc(void *mem);
void claim_alloc(void *mem);

void maybe_print_backtrace(const alloc_header *) const;

private:
// private and undefined to disable copying
memory_region(const memory_region& rhs);
Expand Down

5 comments on commit 2d82d93

@bors
Copy link
Contributor

@bors bors commented on 2d82d93 Jul 19, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

saw approval from pcwalton
at kmcallister@2d82d93

@bors
Copy link
Contributor

@bors bors commented on 2d82d93 Jul 19, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merging kmcallister/rust/rt-diag-messages = 2d82d93 into auto

@bors
Copy link
Contributor

@bors bors commented on 2d82d93 Jul 19, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kmcallister/rust/rt-diag-messages = 2d82d93 merged ok, testing candidate = 91ebfbb

@bors
Copy link
Contributor

@bors bors commented on 2d82d93 Jul 19, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-forwarding master to auto = 91ebfbb

Please sign in to comment.