// Now garbage collect the valid session directories.
let mut deletion_candidates = vec![];
- let mut definitely_delete = vec![];
for (lock_file_name, directory_name) in &lock_file_to_session_dir {
debug!("garbage_collect_session_directories() - inspecting: {}", directory_name);
successfully acquired lock"
);
- // Note that we are holding on to the lock
- definitely_delete.push((crate_directory.join(directory_name), Some(lock)));
+ delete_old(sess, &crate_directory.join(directory_name));
+
+ // 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(_) => {
debug!(
mem::drop(lock);
}
- for (path, lock) in definitely_delete {
- debug!("garbage_collect_session_directories() - deleting `{}`", path.display());
+ Ok(())
+}
- if let Err(err) = safe_remove_dir_all(&path) {
- sess.warn(&format!(
- "Failed to garbage collect incremental \
- compilation session directory `{}`: {}",
- path.display(),
- err
- ));
- } else {
- delete_session_dir_lock_file(sess, &lock_file_path(&path));
- }
+fn delete_old(sess: &Session, path: &Path) {
+ debug!("garbage_collect_session_directories() - deleting `{}`", path.display());
- // 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);
+ if let Err(err) = safe_remove_dir_all(&path) {
+ sess.warn(&format!(
+ "Failed to garbage collect incremental compilation session directory `{}`: {}",
+ path.display(),
+ err
+ ));
+ } else {
+ delete_session_dir_lock_file(sess, &lock_file_path(&path));
}
-
- Ok(())
}
fn all_except_most_recent(