From aebe2cfac213eb29744845ae3f87b25bed69c0dc Mon Sep 17 00:00:00 2001 From: Boris Chiou Date: Tue, 19 Dec 2017 17:00:20 -0500 Subject: [PATCH] Dump the requested aligment if out of memory while allocating a table. --- components/hashglobe/src/lib.rs | 20 +++++++++++++++----- components/hashglobe/src/table.rs | 3 ++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/components/hashglobe/src/lib.rs b/components/hashglobe/src/lib.rs index 6431d335031..49038a51859 100644 --- a/components/hashglobe/src/lib.rs +++ b/components/hashglobe/src/lib.rs @@ -26,17 +26,25 @@ trait Recover { fn replace(&mut self, key: Self::Key) -> Option; } +#[derive(Debug)] +pub struct AllocationInfo { + /// The size we are requesting. + size: usize, + /// The alignment we are requesting. + alignment: usize, +} + #[derive(Debug)] pub struct FailedAllocationError { reason: &'static str, - /// The size we are allocating, if needed. - allocation_size: Option, + /// The allocation info we are requesting, if needed. + allocation_info: Option, } impl FailedAllocationError { #[inline] pub fn new(reason: &'static str) -> Self { - Self { reason, allocation_size: None } + Self { reason, allocation_info: None } } } @@ -48,8 +56,10 @@ impl error::Error for FailedAllocationError { impl fmt::Display for FailedAllocationError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self.allocation_size { - Some(size) => write!(f, "{}, allocation size: {}", self.reason, size), + match self.allocation_info { + Some(ref info) => { + write!(f, "{}, allocation: (size: {}, alignment: {})", self.reason, info.size, info.alignment) + }, None => self.reason.fmt(f), } } diff --git a/components/hashglobe/src/table.rs b/components/hashglobe/src/table.rs index 668b688dbac..bd801b43544 100644 --- a/components/hashglobe/src/table.rs +++ b/components/hashglobe/src/table.rs @@ -778,9 +778,10 @@ impl RawTable { let buffer = alloc(size, alignment); if buffer.is_null() { + use AllocationInfo; return Err(FailedAllocationError { reason: "out of memory when allocating RawTable", - allocation_size: Some(size), + allocation_info: Some(AllocationInfo { size, alignment }), }); }