about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <17426603+bjorn3@users.noreply.github.com>2022-08-23 16:51:06 +0000
committerbjorn3 <17426603+bjorn3@users.noreply.github.com>2022-08-23 16:51:06 +0000
commitf71c54574687681d0ea61175e3b78a823bfb5dee (patch)
treef0828743fb66618787bf01881af3830d8bbcf558
parent5b4195669ebb2e7065b00258316d375b1be9b1b0 (diff)
downloadrust-f71c54574687681d0ea61175e3b78a823bfb5dee.tar.gz
rust-f71c54574687681d0ea61175e3b78a823bfb5dee.zip
Make sure to count reused cgus towards the count of jobs done
-rw-r--r--src/concurrency_limiter.rs13
-rw-r--r--src/driver/aot.rs1
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))
                     }
                 }