From 94e90d5fc6fc0f40453db6c60d1c133f766bbfcc Mon Sep 17 00:00:00 2001 From: Adam Reichold Date: Fri, 10 May 2024 09:01:51 +0200 Subject: [PATCH] Avoid option dance in WritablePage by taking additonal reference count traffic in its Drop impl. --- src/tree_store/page_store/cached_file.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/tree_store/page_store/cached_file.rs b/src/tree_store/page_store/cached_file.rs index 747609ba..8f96d61b 100644 --- a/src/tree_store/page_store/cached_file.rs +++ b/src/tree_store/page_store/cached_file.rs @@ -30,27 +30,26 @@ impl CachePriority { pub(super) struct WritablePage { buffer: Arc>, offset: u64, - data: Option>, + data: Arc<[u8]>, priority: CachePriority, } impl WritablePage { pub(super) fn mem(&self) -> &[u8] { - self.data.as_ref().unwrap() + &self.data } pub(super) fn mem_mut(&mut self) -> &mut [u8] { - Arc::get_mut(self.data.as_mut().unwrap()).unwrap() + Arc::get_mut(&mut self.data).unwrap() } } impl Drop for WritablePage { fn drop(&mut self) { - let data = self.data.take().unwrap(); self.buffer .lock() .unwrap() - .return_value(&self.offset, data, self.priority); + .return_value(&self.offset, self.data.clone(), self.priority); } } @@ -487,7 +486,7 @@ impl PagedCachedFile { Ok(WritablePage { buffer: self.write_buffer.clone(), offset, - data: Some(data), + data, priority, }) }