mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-07 09:13:07 +03:00
@@ -10,6 +10,7 @@ pub(super) struct ConcurrencyLimiter {
|
||||
helper_thread: Option<HelperThread>,
|
||||
state: Arc<Mutex<state::ConcurrencyLimiterState>>,
|
||||
available_token_condvar: Arc<Condvar>,
|
||||
finished: bool,
|
||||
}
|
||||
|
||||
impl ConcurrencyLimiter {
|
||||
@@ -32,6 +33,7 @@ pub(super) fn new(sess: &Session, pending_jobs: usize) -> Self {
|
||||
helper_thread: Some(helper_thread),
|
||||
state,
|
||||
available_token_condvar: Arc::new(Condvar::new()),
|
||||
finished: false,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,16 +58,23 @@ pub(super) fn job_already_done(&mut self) {
|
||||
let mut state = self.state.lock().unwrap();
|
||||
state.job_already_done();
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for ConcurrencyLimiter {
|
||||
fn drop(&mut self) {
|
||||
//
|
||||
pub(crate) fn finished(mut self) {
|
||||
self.helper_thread.take();
|
||||
|
||||
// Assert that all jobs have finished
|
||||
let state = Mutex::get_mut(Arc::get_mut(&mut self.state).unwrap()).unwrap();
|
||||
state.assert_done();
|
||||
|
||||
self.finished = true;
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for ConcurrencyLimiter {
|
||||
fn drop(&mut self) {
|
||||
if !self.finished && !std::thread::panicking() {
|
||||
panic!("Forgot to call finished() on ConcurrencyLimiter");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -106,7 +106,7 @@ pub(crate) fn join(
|
||||
}
|
||||
}
|
||||
|
||||
drop(self.concurrency_limiter);
|
||||
self.concurrency_limiter.finished();
|
||||
|
||||
(
|
||||
CodegenResults {
|
||||
|
||||
Reference in New Issue
Block a user