1
Fork 0

Delete files immediately, instead of collecting into vector

This commit is contained in:
Dániel Buga 2020-10-28 17:21:02 +01:00
parent 2fa359814a
commit a8803d3c04

View file

@ -765,7 +765,6 @@ pub fn garbage_collect_session_directories(sess: &Session) -> io::Result<()> {
// Now garbage collect the valid session directories. // Now garbage collect the valid session directories.
let mut deletion_candidates = vec![]; let mut deletion_candidates = vec![];
let mut definitely_delete = vec![];
for (lock_file_name, directory_name) in &lock_file_to_session_dir { for (lock_file_name, directory_name) in &lock_file_to_session_dir {
debug!("garbage_collect_session_directories() - inspecting: {}", directory_name); debug!("garbage_collect_session_directories() - inspecting: {}", directory_name);
@ -842,8 +841,11 @@ pub fn garbage_collect_session_directories(sess: &Session) -> io::Result<()> {
successfully acquired lock" successfully acquired lock"
); );
// Note that we are holding on to the lock delete_old(sess, &crate_directory.join(directory_name));
definitely_delete.push((crate_directory.join(directory_name), Some(lock)));
// Let's make it explicit that the file lock is released at this point,
// or rather, that we held on to it until here
mem::drop(lock);
} }
Err(_) => { Err(_) => {
debug!( debug!(
@ -880,26 +882,21 @@ pub fn garbage_collect_session_directories(sess: &Session) -> io::Result<()> {
mem::drop(lock); mem::drop(lock);
} }
for (path, lock) in definitely_delete { Ok(())
}
fn delete_old(sess: &Session, path: &Path) {
debug!("garbage_collect_session_directories() - deleting `{}`", path.display()); debug!("garbage_collect_session_directories() - deleting `{}`", path.display());
if let Err(err) = safe_remove_dir_all(&path) { if let Err(err) = safe_remove_dir_all(&path) {
sess.warn(&format!( sess.warn(&format!(
"Failed to garbage collect incremental \ "Failed to garbage collect incremental compilation session directory `{}`: {}",
compilation session directory `{}`: {}",
path.display(), path.display(),
err err
)); ));
} else { } else {
delete_session_dir_lock_file(sess, &lock_file_path(&path)); delete_session_dir_lock_file(sess, &lock_file_path(&path));
} }
// Let's make it explicit that the file lock is released at this point,
// or rather, that we held on to it until here
mem::drop(lock);
}
Ok(())
} }
fn all_except_most_recent( fn all_except_most_recent(