@@ -1475,14 +1475,12 @@ fn start_executing_work<B: ExtraBackendMethods>(
1475
1475
if !cgcx. opts . unstable_opts . no_parallel_llvm {
1476
1476
helper. request_token ( ) ;
1477
1477
}
1478
- assert ! ( !codegen_aborted) ;
1479
1478
assert_eq ! ( main_thread_worker_state, MainThreadWorkerState :: Codegenning ) ;
1480
1479
main_thread_worker_state = MainThreadWorkerState :: Idle ;
1481
1480
}
1482
1481
1483
1482
Message :: CodegenComplete => {
1484
1483
codegen_done = true ;
1485
- assert ! ( !codegen_aborted) ;
1486
1484
assert_eq ! ( main_thread_worker_state, MainThreadWorkerState :: Codegenning ) ;
1487
1485
main_thread_worker_state = MainThreadWorkerState :: Idle ;
1488
1486
}
@@ -1494,7 +1492,6 @@ fn start_executing_work<B: ExtraBackendMethods>(
1494
1492
// then conditions above will ensure no more work is spawned but
1495
1493
// we'll keep executing this loop until `running` hits 0.
1496
1494
Message :: CodegenAborted => {
1497
- assert ! ( !codegen_aborted) ;
1498
1495
codegen_done = true ;
1499
1496
codegen_aborted = true ;
1500
1497
}
@@ -1536,8 +1533,11 @@ fn start_executing_work<B: ExtraBackendMethods>(
1536
1533
Message :: Done { result : Err ( None ) , worker_id : _ } => {
1537
1534
bug ! ( "worker thread panicked" ) ;
1538
1535
}
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 ;
1541
1541
}
1542
1542
Message :: CodegenItem => bug ! ( "the coordinator should not receive codegen requests" ) ,
1543
1543
}
0 commit comments