summaryrefslogtreecommitdiffstats
path: root/src/files.rs
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-03-26 13:05:15 +0100
committerrabite <rabite@posteo.de>2019-03-26 13:05:15 +0100
commit8d8d9631b5fce48e2e65410aa4d0df64948f5ad8 (patch)
tree737a4f787ace9f2ee01cb0f65c4cbd8280600d63 /src/files.rs
parent90e626d16902f2dfcaf50121325913c579583bca (diff)
fixed possibler race condition
Diffstat (limited to 'src/files.rs')
-rw-r--r--src/files.rs12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/files.rs b/src/files.rs
index 90646ba..8b3265c 100644
--- a/src/files.rs
+++ b/src/files.rs
@@ -379,14 +379,13 @@ impl Files {
self.dirty_meta.set_clean();
let meta_pool = make_pool(sender.clone());
- let dirsize_pool = make_pool(sender);
for file in self.files.iter_mut().take(meta_files) {
if !file.meta_processed {
file.take_meta(&meta_pool).ok();
}
- if file.is_dir() {
- file.take_dirsize(&dirsize_pool).ok();
+ if file.is_dir() && file.meta_processed {
+ file.take_dirsize(&meta_pool).ok();
}
}
@@ -568,7 +567,7 @@ impl File {
None => Async::new(meta_closure)
};
if let Some(dirty_meta) = dirty_meta {
- meta.on_ready(Box::new(move |_| {
+ meta.on_ready(Box::new(move || {
let mut dirty_meta = dirty_meta.clone();
dirty_meta.set_dirty();
@@ -594,7 +593,7 @@ impl File {
};
if let Some(dirty_meta) = dirty_meta {
- dirsize.on_ready(Box::new(move |_| {
+ dirsize.on_ready(Box::new(move || {
let mut dirty_meta = dirty_meta.clone();
dirty_meta.set_dirty();
@@ -650,14 +649,15 @@ impl File {
}
pub fn reload_meta(&mut self) -> HResult<()> {
- self.dirty_meta.as_mut()?.set_dirty();
self.meta_processed = false;
self.meta = File::make_async_meta(&self.path,
self.dirty_meta.clone(),
None);
+ self.meta.run();
if self.dirsize.is_some() {
self.dirsize
= Some(File::make_async_dirsize(&self.path, self.dirty_meta.clone(), None));
+ self.dirsize.as_mut()?.run();
}
Ok(())
}