Skip to content

Commit 3f59e67

Browse files
committed
[Experiment] advise mmap to cleanup closed segments
1 parent 2209eb2 commit 3f59e67

File tree

3 files changed

+13
-0
lines changed

3 files changed

+13
-0
lines changed

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,7 @@ fn close_segment(mut segment: OpenSegment, start_index: u64) -> Result<ClosedSeg
572572
.path()
573573
.with_file_name(format!("closed-{start_index}"));
574574
segment.segment.rename(new_path)?;
575+
segment.segment.close();
575576
Ok(ClosedSegment {
576577
start_index,
577578
segment: segment.segment,

src/mmap_view_sync.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ pub struct MmapViewSync {
1919
}
2020

2121
impl MmapViewSync {
22+
pub fn close(&self) {
23+
unsafe {
24+
let i = &mut *self.inner.get();
25+
i.unchecked_advise(memmap2::UncheckedAdvice::DontNeed)
26+
.unwrap();
27+
}
28+
}
29+
2230
pub fn from_file(file: &File, offset: usize, capacity: usize) -> Result<MmapViewSync> {
2331
let mmap = unsafe {
2432
MmapOptions::new()

src/segment.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ pub struct Segment {
111111
}
112112

113113
impl Segment {
114+
pub fn close(&self) {
115+
self.mmap.close()
116+
}
117+
114118
/// Creates a new segment.
115119
///
116120
/// The initial capacity must be at least 8 bytes.

0 commit comments

Comments
 (0)