|
1 | 1 | pub use jobserver_crate::Client; |
2 | | -use lazy_static::lazy_static; |
| 2 | +use std::lazy::SyncLazy; |
3 | 3 |
|
4 | | -lazy_static! { |
5 | | - // We can only call `from_env` once per process |
| 4 | +// We can only call `from_env` once per process |
6 | 5 |
|
7 | | - // Note that this is unsafe because it may misinterpret file descriptors |
8 | | - // on Unix as jobserver file descriptors. We hopefully execute this near |
9 | | - // the beginning of the process though to ensure we don't get false |
10 | | - // positives, or in other words we try to execute this before we open |
11 | | - // any file descriptors ourselves. |
12 | | - // |
13 | | - // Pick a "reasonable maximum" if we don't otherwise have |
14 | | - // a jobserver in our environment, capping out at 32 so we |
15 | | - // don't take everything down by hogging the process run queue. |
16 | | - // The fixed number is used to have deterministic compilation |
17 | | - // across machines. |
18 | | - // |
19 | | - // Also note that we stick this in a global because there could be |
20 | | - // multiple rustc instances in this process, and the jobserver is |
21 | | - // per-process. |
22 | | - static ref GLOBAL_CLIENT: Client = unsafe { |
23 | | - Client::from_env().unwrap_or_else(|| { |
24 | | - let client = Client::new(32).expect("failed to create jobserver"); |
25 | | - // Acquire a token for the main thread which we can release later |
26 | | - client.acquire_raw().ok(); |
27 | | - client |
28 | | - }) |
29 | | - }; |
30 | | -} |
| 6 | +// Note that this is unsafe because it may misinterpret file descriptors |
| 7 | +// on Unix as jobserver file descriptors. We hopefully execute this near |
| 8 | +// the beginning of the process though to ensure we don't get false |
| 9 | +// positives, or in other words we try to execute this before we open |
| 10 | +// any file descriptors ourselves. |
| 11 | +// |
| 12 | +// Pick a "reasonable maximum" if we don't otherwise have |
| 13 | +// a jobserver in our environment, capping out at 32 so we |
| 14 | +// don't take everything down by hogging the process run queue. |
| 15 | +// The fixed number is used to have deterministic compilation |
| 16 | +// across machines. |
| 17 | +// |
| 18 | +// Also note that we stick this in a global because there could be |
| 19 | +// multiple rustc instances in this process, and the jobserver is |
| 20 | +// per-process. |
| 21 | +static GLOBAL_CLIENT: SyncLazy<Client> = SyncLazy::new(|| unsafe { |
| 22 | + Client::from_env().unwrap_or_else(|| { |
| 23 | + let client = Client::new(32).expect("failed to create jobserver"); |
| 24 | + // Acquire a token for the main thread which we can release later |
| 25 | + client.acquire_raw().ok(); |
| 26 | + client |
| 27 | + }) |
| 28 | +}); |
31 | 29 |
|
32 | 30 | pub fn client() -> Client { |
33 | 31 | GLOBAL_CLIENT.clone() |
|
0 commit comments