Skip to content

Commit

Permalink
Tweak how the "system-heap-allocated" memory report is gathered.
Browse files Browse the repository at this point in the history
  • Loading branch information
nnethercote committed Aug 14, 2015
1 parent a35360a commit 77fadb7
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions components/profile/mem.rs
Expand Up @@ -440,14 +440,21 @@ mod system_reporter {

#[cfg(target_os="linux")]
fn get_system_heap_allocated() -> Option<usize> {
let info: struct_mallinfo = unsafe {
mallinfo()
};
// The documentation in the glibc man page makes it sound like |uordblks|
// would suffice, but that only gets the small allocations that are put in
// the brk heap. We need |hblkhd| as well to get the larger allocations
// that are mmapped.
Some((info.hblkhd + info.uordblks) as usize)
let info: struct_mallinfo = unsafe { mallinfo() };

// The documentation in the glibc man page makes it sound like |uordblks| would suffice,
// but that only gets the small allocations that are put in the brk heap. We need |hblkhd|
// as well to get the larger allocations that are mmapped.
//
// These fields are unfortunately |int| and so can overflow (becoming negative) if memory
// usage gets high enough. So don't report anything in that case. In the non-overflow case
// we cast the two values to usize before adding them to make sure the sum also doesn't
// overflow.
if info.hblkhd < 0 || info.uordblks < 0 {
None
} else {
Some(info.hblkhd as usize + info.uordblks as usize)
}
}

#[cfg(not(target_os="linux"))]
Expand Down

0 comments on commit 77fadb7

Please sign in to comment.