mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
Remove jobserver from Session
It is effectively a global resource and the jobserver::Client in Session was a clone of GLOBAL_CLIENT anyway.
This commit is contained in:
parent
8e37e15183
commit
ead78fdfdf
@ -3507,7 +3507,6 @@ dependencies = [
|
|||||||
"cc",
|
"cc",
|
||||||
"either",
|
"either",
|
||||||
"itertools",
|
"itertools",
|
||||||
"jobserver",
|
|
||||||
"libc",
|
"libc",
|
||||||
"object 0.36.5",
|
"object 0.36.5",
|
||||||
"pathdiff",
|
"pathdiff",
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
use std::sync::{Arc, Condvar, Mutex};
|
use std::sync::{Arc, Condvar, Mutex};
|
||||||
|
|
||||||
use jobserver::HelperThread;
|
use rustc_data_structures::jobserver::{self, HelperThread};
|
||||||
use rustc_errors::DiagCtxtHandle;
|
use rustc_errors::DiagCtxtHandle;
|
||||||
use rustc_session::Session;
|
|
||||||
|
|
||||||
// FIXME don't panic when a worker thread panics
|
// FIXME don't panic when a worker thread panics
|
||||||
|
|
||||||
@ -14,14 +13,13 @@ pub(super) struct ConcurrencyLimiter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ConcurrencyLimiter {
|
impl ConcurrencyLimiter {
|
||||||
pub(super) fn new(sess: &Session, pending_jobs: usize) -> Self {
|
pub(super) fn new(pending_jobs: usize) -> Self {
|
||||||
let state = Arc::new(Mutex::new(state::ConcurrencyLimiterState::new(pending_jobs)));
|
let state = Arc::new(Mutex::new(state::ConcurrencyLimiterState::new(pending_jobs)));
|
||||||
let available_token_condvar = Arc::new(Condvar::new());
|
let available_token_condvar = Arc::new(Condvar::new());
|
||||||
|
|
||||||
let state_helper = state.clone();
|
let state_helper = state.clone();
|
||||||
let available_token_condvar_helper = available_token_condvar.clone();
|
let available_token_condvar_helper = available_token_condvar.clone();
|
||||||
let helper_thread = sess
|
let helper_thread = jobserver::client()
|
||||||
.jobserver
|
|
||||||
.clone()
|
.clone()
|
||||||
.into_helper_thread(move |token| {
|
.into_helper_thread(move |token| {
|
||||||
let mut state = state_helper.lock().unwrap();
|
let mut state = state_helper.lock().unwrap();
|
||||||
@ -113,7 +111,7 @@ impl Drop for ConcurrencyLimiterToken {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mod state {
|
mod state {
|
||||||
use jobserver::Acquired;
|
use rustc_data_structures::jobserver::Acquired;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub(super) struct ConcurrencyLimiterState {
|
pub(super) struct ConcurrencyLimiterState {
|
||||||
|
@ -679,7 +679,7 @@ pub(crate) fn run_aot(
|
|||||||
metadata_module: None,
|
metadata_module: None,
|
||||||
metadata,
|
metadata,
|
||||||
crate_info: CrateInfo::new(tcx, target_cpu),
|
crate_info: CrateInfo::new(tcx, target_cpu),
|
||||||
concurrency_limiter: ConcurrencyLimiter::new(tcx.sess, 0),
|
concurrency_limiter: ConcurrencyLimiter::new(0),
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -711,7 +711,7 @@ pub(crate) fn run_aot(
|
|||||||
CguReuse::PreLto | CguReuse::PostLto => false,
|
CguReuse::PreLto | CguReuse::PostLto => false,
|
||||||
});
|
});
|
||||||
|
|
||||||
let concurrency_limiter = IntoDynSyncSend(ConcurrencyLimiter::new(tcx.sess, todo_cgus.len()));
|
let concurrency_limiter = IntoDynSyncSend(ConcurrencyLimiter::new(todo_cgus.len()));
|
||||||
|
|
||||||
let modules = tcx.sess.time("codegen mono items", || {
|
let modules = tcx.sess.time("codegen mono items", || {
|
||||||
let mut modules: Vec<_> = par_map(todo_cgus, |(_, cgu)| {
|
let mut modules: Vec<_> = par_map(todo_cgus, |(_, cgu)| {
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
#![warn(unused_lifetimes)]
|
#![warn(unused_lifetimes)]
|
||||||
// tidy-alphabetical-end
|
// tidy-alphabetical-end
|
||||||
|
|
||||||
extern crate jobserver;
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate rustc_middle;
|
extern crate rustc_middle;
|
||||||
extern crate rustc_abi;
|
extern crate rustc_abi;
|
||||||
|
@ -11,7 +11,6 @@ bitflags = "2.4.1"
|
|||||||
cc = "1.1.23"
|
cc = "1.1.23"
|
||||||
either = "1.5.0"
|
either = "1.5.0"
|
||||||
itertools = "0.12"
|
itertools = "0.12"
|
||||||
jobserver = "0.1.28"
|
|
||||||
pathdiff = "0.2.0"
|
pathdiff = "0.2.0"
|
||||||
regex = "1.4"
|
regex = "1.4"
|
||||||
rustc_abi = { path = "../rustc_abi" }
|
rustc_abi = { path = "../rustc_abi" }
|
||||||
|
@ -6,9 +6,9 @@ use std::sync::Arc;
|
|||||||
use std::sync::mpsc::{Receiver, Sender, channel};
|
use std::sync::mpsc::{Receiver, Sender, channel};
|
||||||
use std::{fs, io, mem, str, thread};
|
use std::{fs, io, mem, str, thread};
|
||||||
|
|
||||||
use jobserver::{Acquired, Client};
|
|
||||||
use rustc_ast::attr;
|
use rustc_ast::attr;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
|
use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
|
||||||
|
use rustc_data_structures::jobserver::{self, Acquired};
|
||||||
use rustc_data_structures::memmap::Mmap;
|
use rustc_data_structures::memmap::Mmap;
|
||||||
use rustc_data_structures::profiling::{SelfProfilerRef, VerboseTimingGuard};
|
use rustc_data_structures::profiling::{SelfProfilerRef, VerboseTimingGuard};
|
||||||
use rustc_errors::emitter::Emitter;
|
use rustc_errors::emitter::Emitter;
|
||||||
@ -456,7 +456,6 @@ pub(crate) fn start_async_codegen<B: ExtraBackendMethods>(
|
|||||||
metadata_module: Option<CompiledModule>,
|
metadata_module: Option<CompiledModule>,
|
||||||
) -> OngoingCodegen<B> {
|
) -> OngoingCodegen<B> {
|
||||||
let (coordinator_send, coordinator_receive) = channel();
|
let (coordinator_send, coordinator_receive) = channel();
|
||||||
let sess = tcx.sess;
|
|
||||||
|
|
||||||
let crate_attrs = tcx.hir().attrs(rustc_hir::CRATE_HIR_ID);
|
let crate_attrs = tcx.hir().attrs(rustc_hir::CRATE_HIR_ID);
|
||||||
let no_builtins = attr::contains_name(crate_attrs, sym::no_builtins);
|
let no_builtins = attr::contains_name(crate_attrs, sym::no_builtins);
|
||||||
@ -477,7 +476,6 @@ pub(crate) fn start_async_codegen<B: ExtraBackendMethods>(
|
|||||||
shared_emitter,
|
shared_emitter,
|
||||||
codegen_worker_send,
|
codegen_worker_send,
|
||||||
coordinator_receive,
|
coordinator_receive,
|
||||||
sess.jobserver.clone(),
|
|
||||||
Arc::new(regular_config),
|
Arc::new(regular_config),
|
||||||
Arc::new(metadata_config),
|
Arc::new(metadata_config),
|
||||||
Arc::new(allocator_config),
|
Arc::new(allocator_config),
|
||||||
@ -1093,7 +1091,6 @@ fn start_executing_work<B: ExtraBackendMethods>(
|
|||||||
shared_emitter: SharedEmitter,
|
shared_emitter: SharedEmitter,
|
||||||
codegen_worker_send: Sender<CguMessage>,
|
codegen_worker_send: Sender<CguMessage>,
|
||||||
coordinator_receive: Receiver<Box<dyn Any + Send>>,
|
coordinator_receive: Receiver<Box<dyn Any + Send>>,
|
||||||
jobserver: Client,
|
|
||||||
regular_config: Arc<ModuleConfig>,
|
regular_config: Arc<ModuleConfig>,
|
||||||
metadata_config: Arc<ModuleConfig>,
|
metadata_config: Arc<ModuleConfig>,
|
||||||
allocator_config: Arc<ModuleConfig>,
|
allocator_config: Arc<ModuleConfig>,
|
||||||
@ -1145,7 +1142,7 @@ fn start_executing_work<B: ExtraBackendMethods>(
|
|||||||
// get tokens on `coordinator_receive` which will
|
// get tokens on `coordinator_receive` which will
|
||||||
// get managed in the main loop below.
|
// get managed in the main loop below.
|
||||||
let coordinator_send2 = coordinator_send.clone();
|
let coordinator_send2 = coordinator_send.clone();
|
||||||
let helper = jobserver
|
let helper = jobserver::client()
|
||||||
.into_helper_thread(move |token| {
|
.into_helper_thread(move |token| {
|
||||||
drop(coordinator_send2.send(Box::new(Message::Token::<B>(token))));
|
drop(coordinator_send2.send(Box::new(Message::Token::<B>(token))));
|
||||||
})
|
})
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use std::sync::{LazyLock, OnceLock};
|
use std::sync::{LazyLock, OnceLock};
|
||||||
|
|
||||||
pub use jobserver_crate::Client;
|
pub use jobserver_crate::{Acquired, Client, HelperThread};
|
||||||
use jobserver_crate::{FromEnv, FromEnvErrorKind};
|
use jobserver_crate::{FromEnv, FromEnvErrorKind};
|
||||||
|
|
||||||
// We can only call `from_env_ext` once per process
|
// We can only call `from_env_ext` once per process
|
||||||
|
@ -8,7 +8,6 @@ use std::{env, fmt, io};
|
|||||||
|
|
||||||
use rustc_data_structures::flock;
|
use rustc_data_structures::flock;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxIndexSet};
|
use rustc_data_structures::fx::{FxHashMap, FxIndexSet};
|
||||||
use rustc_data_structures::jobserver::{self, Client};
|
|
||||||
use rustc_data_structures::profiling::{SelfProfiler, SelfProfilerRef};
|
use rustc_data_structures::profiling::{SelfProfiler, SelfProfilerRef};
|
||||||
use rustc_data_structures::sync::{
|
use rustc_data_structures::sync::{
|
||||||
DynSend, DynSync, Lock, Lrc, MappedReadGuard, ReadGuard, RwLock,
|
DynSend, DynSync, Lock, Lrc, MappedReadGuard, ReadGuard, RwLock,
|
||||||
@ -154,10 +153,6 @@ pub struct Session {
|
|||||||
/// Data about code being compiled, gathered during compilation.
|
/// Data about code being compiled, gathered during compilation.
|
||||||
pub code_stats: CodeStats,
|
pub code_stats: CodeStats,
|
||||||
|
|
||||||
/// Loaded up early on in the initialization of this `Session` to avoid
|
|
||||||
/// false positives about a job server in our environment.
|
|
||||||
pub jobserver: Client,
|
|
||||||
|
|
||||||
/// This only ever stores a `LintStore` but we don't want a dependency on that type here.
|
/// This only ever stores a `LintStore` but we don't want a dependency on that type here.
|
||||||
pub lint_store: Option<Lrc<dyn LintStoreMarker>>,
|
pub lint_store: Option<Lrc<dyn LintStoreMarker>>,
|
||||||
|
|
||||||
@ -1072,7 +1067,6 @@ pub fn build_session(
|
|||||||
incr_comp_session: RwLock::new(IncrCompSession::NotInitialized),
|
incr_comp_session: RwLock::new(IncrCompSession::NotInitialized),
|
||||||
prof,
|
prof,
|
||||||
code_stats: Default::default(),
|
code_stats: Default::default(),
|
||||||
jobserver: jobserver::client(),
|
|
||||||
lint_store: None,
|
lint_store: None,
|
||||||
registered_lints: false,
|
registered_lints: false,
|
||||||
driver_lint_caps,
|
driver_lint_caps,
|
||||||
|
Loading…
Reference in New Issue
Block a user