@@ -661,50 +661,55 @@ pub fn garbage_collect_session_directories(sess: &Session) -> io::Result<()> {
661661 session_directories. sort ( ) ;
662662
663663 // Now map from lock files to session directories
664- let lock_file_to_session_dir: UnordMap < String , Option < String > > =
665- UnordMap :: from ( lock_files. into_items ( ) . map ( |lock_file_name| {
664+ let lock_file_to_session_dir: UnordMap < String , Option < String > > = lock_files
665+ . into_items ( )
666+ . map ( |lock_file_name| {
666667 assert ! ( lock_file_name. ends_with( LOCK_FILE_EXT ) ) ;
667668 let dir_prefix_end = lock_file_name. len ( ) - LOCK_FILE_EXT . len ( ) ;
668669 let session_dir = {
669670 let dir_prefix = & lock_file_name[ 0 ..dir_prefix_end] ;
670671 session_directories. iter ( ) . find ( |dir_name| dir_name. starts_with ( dir_prefix) )
671672 } ;
672673 ( lock_file_name, session_dir. map ( String :: clone) )
673- } ) ) ;
674+ } )
675+ . into ( ) ;
674676
675677 // Delete all lock files, that don't have an associated directory. They must
676678 // be some kind of leftover
677- lock_file_to_session_dir. to_sorted ( & ( ) , false ) . iter ( ) . for_each (
678- |( lock_file_name, directory_name) | {
679- if directory_name. is_none ( ) {
680- let Ok ( timestamp) = extract_timestamp_from_session_dir ( lock_file_name) else {
679+ let lock_file_to_session_dir_iter = lock_file_to_session_dir
680+ . items ( )
681+ . map ( |( file, dir) | ( file. as_str ( ) , dir. as_ref ( ) . map ( |y| y. as_str ( ) ) ) ) ;
682+ for ( lock_file_name, directory_name) in
683+ lock_file_to_session_dir_iter. into_sorted_stable_ord ( false )
684+ {
685+ if directory_name. is_none ( ) {
686+ let Ok ( timestamp) = extract_timestamp_from_session_dir ( lock_file_name) else {
681687 debug ! (
682688 "found lock-file with malformed timestamp: {}" ,
683689 crate_directory. join( & lock_file_name) . display( )
684690 ) ;
685691 // Ignore it
686- return ;
692+ continue ;
687693 } ;
688694
689- let lock_file_path = crate_directory. join ( & * * lock_file_name) ;
695+ let lock_file_path = crate_directory. join ( & * lock_file_name) ;
690696
691- if is_old_enough_to_be_collected ( timestamp) {
692- debug ! (
693- "garbage_collect_session_directories() - deleting \
694- garbage lock file: {}",
695- lock_file_path. display( )
696- ) ;
697- delete_session_dir_lock_file ( sess, & lock_file_path) ;
698- } else {
699- debug ! (
700- "garbage_collect_session_directories() - lock file with \
701- no session dir not old enough to be collected: {}",
702- lock_file_path. display( )
703- ) ;
704- }
697+ if is_old_enough_to_be_collected ( timestamp) {
698+ debug ! (
699+ "garbage_collect_session_directories() - deleting \
700+ garbage lock file: {}",
701+ lock_file_path. display( )
702+ ) ;
703+ delete_session_dir_lock_file ( sess, & lock_file_path) ;
704+ } else {
705+ debug ! (
706+ "garbage_collect_session_directories() - lock file with \
707+ no session dir not old enough to be collected: {}",
708+ lock_file_path. display( )
709+ ) ;
705710 }
706- } ,
707- ) ;
711+ }
712+ }
708713
709714 // Filter out `None` directories
710715 let lock_file_to_session_dir: UnordMap < String , String > =
0 commit comments