0.8.6: workaround for memory leaks

This commit is contained in:
Jeremy Soller
2026-01-03 09:44:23 -07:00
parent 57277f2041
commit 42db72daf2
3 changed files with 28 additions and 15 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
name = "redoxfs"
description = "The Redox Filesystem"
repository = "https://gitlab.redox-os.org/redox-os/redoxfs"
version = "0.8.5"
version = "0.8.6"
license-file = "LICENSE"
readme = "README.md"
authors = ["Jeremy Soller <jackpot51@gmail.com>"]
+7
View File
@@ -493,6 +493,11 @@ impl<D: Disk> Resource<D> for FileResource {
let fmap_info = fmaps
.get_mut(&self.node_ptr.id())
.ok_or(Error::new(EBADFD))?;
if !fmap_info.in_use() {
// Notify filesystem of open
tx.on_open_node(self.node_ptr)?;
}
let new_size = (offset as usize + aligned_size).next_multiple_of(PAGE_SIZE);
if new_size > fmap_info.size {
@@ -602,8 +607,10 @@ impl<D: Disk> Resource<D> for FileResource {
// Notify filesystem of close
tx.on_close_node(self.node_ptr)?;
/*TODO: leaks memory, but why?
// Remove from fmaps list
fmaps.remove(&self.node_ptr.id());
*/
}
Ok(())
+20 -14
View File
@@ -335,14 +335,16 @@ impl<'sock, D: Disk> FileScheme<'sock, D> {
};
let node_ptr = resource.node_ptr();
self.fmap
.entry(node_ptr.id())
.or_insert_with(|| {
{
let fmap_info = self.fmap
.entry(node_ptr.id())
.or_insert_with(FileMmapInfo::new);
if !fmap_info.in_use() {
// Notify filesystem of open
self.fs.tx(|tx| tx.on_open_node(node_ptr)).unwrap();
FileMmapInfo::new()
})
.open_fds += 1;
self.fs.tx(|tx| tx.on_open_node(node_ptr))?;
}
fmap_info.open_fds += 1;
}
let id = self.next_id.fetch_add(1, Ordering::Relaxed);
self.files.insert(id, resource);
@@ -929,8 +931,10 @@ impl<'sock, D: Disk> SchemeSync for FileScheme<'sock, D> {
log::error!("failed to close node {}: {}", node_ptr.id(), err);
}
/*TODO: leaks memory, but why?
// Remove from fmap list
self.fmap.remove(&node_ptr.id());
*/
}
}
@@ -1026,14 +1030,16 @@ impl<'sock, D: Disk> SchemeSync for FileScheme<'sock, D> {
};
let node_ptr = resource.node_ptr();
self.fmap
.entry(node_ptr.id())
.or_insert_with(|| {
{
let fmap_info = self.fmap
.entry(node_ptr.id())
.or_insert_with(FileMmapInfo::new);
if !fmap_info.in_use() {
// Notify filesystem of open
self.fs.tx(|tx| tx.on_open_node(node_ptr)).unwrap();
FileMmapInfo::new()
})
.open_fds += 1;
self.fs.tx(|tx| tx.on_open_node(node_ptr))?;
}
fmap_info.open_fds += 1;
}
let id = self.next_id.fetch_add(1, Ordering::Relaxed);
self.files.insert(id, resource);