0.8.6: workaround for memory leaks
This commit is contained in:
+1
-1
@@ -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>"]
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user