@@ -1475,14 +1475,12 @@ fn start_executing_work<B: ExtraBackendMethods>(
14751475 if !cgcx. opts . unstable_opts . no_parallel_llvm {
14761476 helper. request_token ( ) ;
14771477 }
1478- assert ! ( !codegen_aborted) ;
14791478 assert_eq ! ( main_thread_worker_state, MainThreadWorkerState :: Codegenning ) ;
14801479 main_thread_worker_state = MainThreadWorkerState :: Idle ;
14811480 }
14821481
14831482 Message :: CodegenComplete => {
14841483 codegen_done = true ;
1485- assert ! ( !codegen_aborted) ;
14861484 assert_eq ! ( main_thread_worker_state, MainThreadWorkerState :: Codegenning ) ;
14871485 main_thread_worker_state = MainThreadWorkerState :: Idle ;
14881486 }
@@ -1494,7 +1492,6 @@ fn start_executing_work<B: ExtraBackendMethods>(
14941492 // then conditions above will ensure no more work is spawned but
14951493 // we'll keep executing this loop until `running` hits 0.
14961494 Message :: CodegenAborted => {
1497- assert ! ( !codegen_aborted) ;
14981495 codegen_done = true ;
14991496 codegen_aborted = true ;
15001497 }
@@ -1536,8 +1533,11 @@ fn start_executing_work<B: ExtraBackendMethods>(
15361533 Message :: Done { result : Err ( None ) , worker_id : _ } => {
15371534 bug ! ( "worker thread panicked" ) ;
15381535 }
1539- Message :: Done { result : Err ( Some ( WorkerFatalError ) ) , worker_id : _ } => {
1540- return Err ( ( ) ) ;
1536+ Message :: Done { result : Err ( Some ( WorkerFatalError ) ) , worker_id } => {
1537+ // Similar to CodegenAborted, wait for remaining work to finish.
1538+ free_worker ( worker_id) ;
1539+ codegen_done = true ;
1540+ codegen_aborted = true ;
15411541 }
15421542 Message :: CodegenItem => bug ! ( "the coordinator should not receive codegen requests" ) ,
15431543 }
0 commit comments