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:
bjorn3 2024-12-12 11:40:36 +00:00
parent 8e37e15183
commit ead78fdfdf
8 changed files with 9 additions and 23 deletions

View File

@ -3507,7 +3507,6 @@ dependencies = [
"cc", "cc",
"either", "either",
"itertools", "itertools",
"jobserver",
"libc", "libc",
"object 0.36.5", "object 0.36.5",
"pathdiff", "pathdiff",

View File

@ -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 {

View File

@ -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)| {

View File

@ -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;

View File

@ -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" }

View File

@ -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))));
}) })

View File

@ -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

View File

@ -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,