|
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