@@ -2217,55 +2217,57 @@ Or do you want to use the entrypoints '{name}' and '{runtime}' independently on
22172217 }
22182218
22192219 for batch in chunk_groups_merging_batches {
2220- let chunk_groups_merging_tasks = batch
2221- . into_iter ( )
2222- . map ( |( info_ukey, process_block) | {
2223- let cgi = std:: mem:: take ( self . chunk_group_info_mut ( & info_ukey) ) ;
2224- ( info_ukey, process_block, cgi)
2225- } )
2226- . collect :: < Vec < _ > > ( ) ;
2220+ let mut chunk_groups_merging_tasks = Vec :: with_capacity ( batch. len ( ) ) ;
2221+ for ( info_ukey, process_block) in batch {
2222+ let cgi = std:: mem:: take ( self . chunk_group_info_mut ( & info_ukey) ) ;
2223+ chunk_groups_merging_tasks. push ( ( info_ukey, process_block, cgi) ) ;
2224+ }
22272225
2228- let ( chunk_group_infos, chunk_group_merging_results) : ( Vec < _ > , Vec < _ > ) =
2229- chunk_groups_merging_tasks
2230- . into_par_iter ( )
2231- . map ( |( info_ukey, process_block, mut cgi) | {
2232- let mut changed = false ;
2233- let available_modules_length = cgi. available_modules_to_be_merged . len ( ) as u32 ;
2234-
2235- if !cgi. available_modules_to_be_merged . is_empty ( ) {
2236- let available_modules_to_be_merged =
2237- std:: mem:: take ( & mut cgi. available_modules_to_be_merged ) ;
2238-
2239- for modules_to_be_merged in available_modules_to_be_merged {
2240- if !cgi. min_available_modules_init {
2241- cgi. min_available_modules_init = true ;
2242- cgi. min_available_modules = modules_to_be_merged;
2243- changed = true ;
2244- continue ;
2245- }
2246-
2247- let orig = cgi. min_available_modules . clone ( ) ;
2248- cgi. min_available_modules =
2249- Arc :: new ( cgi. min_available_modules . as_ref ( ) & modules_to_be_merged. as_ref ( ) ) ;
2250- changed |= orig != cgi. min_available_modules ;
2226+ let mut chunk_group_merging_results = chunk_groups_merging_tasks
2227+ . into_par_iter ( )
2228+ . map ( |( info_ukey, process_block, mut cgi) | {
2229+ let mut changed = false ;
2230+ let available_modules_length = cgi. available_modules_to_be_merged . len ( ) as u32 ;
2231+
2232+ if !cgi. available_modules_to_be_merged . is_empty ( ) {
2233+ let available_modules_to_be_merged =
2234+ std:: mem:: take ( & mut cgi. available_modules_to_be_merged ) ;
2235+
2236+ for modules_to_be_merged in available_modules_to_be_merged {
2237+ if !cgi. min_available_modules_init {
2238+ cgi. min_available_modules_init = true ;
2239+ cgi. min_available_modules = modules_to_be_merged;
2240+ changed = true ;
2241+ continue ;
22512242 }
2252- }
22532243
2254- if changed {
2255- cgi. invalidate_resulting_available_modules ( ) ;
2244+ let merged = cgi. min_available_modules . as_ref ( ) & modules_to_be_merged. as_ref ( ) ;
2245+ if & merged != cgi. min_available_modules . as_ref ( ) {
2246+ cgi. min_available_modules = Arc :: new ( merged) ;
2247+ changed = true ;
2248+ }
22562249 }
2257- (
2258- ( info_ukey, cgi) ,
2259- ( info_ukey, process_block, changed, available_modules_length) ,
2260- )
2261- } )
2262- . unzip ( ) ;
2263-
2264- for ( info_ukey, cgi) in chunk_group_infos {
2265- * self . chunk_group_info_mut ( & info_ukey) = cgi;
2250+ }
2251+
2252+ if changed {
2253+ cgi. invalidate_resulting_available_modules ( ) ;
2254+ }
2255+
2256+ (
2257+ info_ukey,
2258+ Some ( cgi) ,
2259+ process_block,
2260+ changed,
2261+ available_modules_length,
2262+ )
2263+ } )
2264+ . collect :: < Vec < _ > > ( ) ;
2265+
2266+ for ( info_ukey, cgi, _, _, _) in & mut chunk_group_merging_results {
2267+ * self . chunk_group_info_mut ( info_ukey) = cgi. take ( ) . expect ( "should have chunk group info" ) ;
22662268 }
22672269
2268- for ( info_ukey, process_block, changed, available_modules_length) in
2270+ for ( info_ukey, _ , process_block, changed, available_modules_length) in
22692271 chunk_group_merging_results
22702272 {
22712273 self . stat_merged_available_module_sets += available_modules_length;
0 commit comments