diff options
| author | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2022-08-23 16:51:06 +0000 |
|---|---|---|
| committer | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2022-08-23 16:51:06 +0000 |
| commit | f71c54574687681d0ea61175e3b78a823bfb5dee (patch) | |
| tree | f0828743fb66618787bf01881af3830d8bbcf558 | |
| parent | 5b4195669ebb2e7065b00258316d375b1be9b1b0 (diff) | |
| download | rust-f71c54574687681d0ea61175e3b78a823bfb5dee.tar.gz rust-f71c54574687681d0ea61175e3b78a823bfb5dee.zip | |
Make sure to count reused cgus towards the count of jobs done
| -rw-r--r-- | src/concurrency_limiter.rs | 13 | ||||
| -rw-r--r-- | src/driver/aot.rs | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/concurrency_limiter.rs b/src/concurrency_limiter.rs index eaf3a61f403..d966ea323eb 100644 --- a/src/concurrency_limiter.rs +++ b/src/concurrency_limiter.rs @@ -49,6 +49,11 @@ impl ConcurrencyLimiter { state = self.available_token_condvar.wait(state).unwrap(); } } + + pub(super) fn job_already_done(&mut self) { + let mut state = self.state.lock().unwrap(); + state.job_already_done(); + } } impl Drop for ConcurrencyLimiter { @@ -137,6 +142,14 @@ mod state { self.assert_invariants(); } + pub(super) fn job_already_done(&mut self) { + self.assert_invariants(); + self.pending_jobs -= 1; + self.assert_invariants(); + self.drop_excess_capacity(); + self.assert_invariants(); + } + fn drop_excess_capacity(&mut self) { self.assert_invariants(); if self.active_jobs == self.pending_jobs { diff --git a/src/driver/aot.rs b/src/driver/aot.rs index 67ac52f2d03..8eabe1cbcb1 100644 --- a/src/driver/aot.rs +++ b/src/driver/aot.rs @@ -391,6 +391,7 @@ pub(crate) fn run_aot( } CguReuse::PreLto => unreachable!(), CguReuse::PostLto => { + concurrency_limiter.job_already_done(); OngoingModuleCodegen::Sync(reuse_workproduct_for_cgu(tcx, &*cgu)) } } |
