|
1 |
| -use std::{marker::PhantomData, mem::MaybeUninit, sync::Once}; |
| 1 | +use std::marker::PhantomData; |
2 | 2 |
|
3 |
| -use crate::Error; |
| 3 | +use crate::{parallel::once_lock::OnceLock, Error}; |
4 | 4 |
|
5 | 5 | pub(crate) struct JobToken(PhantomData<()>);
|
6 | 6 |
|
@@ -34,19 +34,13 @@ impl JobTokenServer {
|
34 | 34 | /// that has to be static so that it will be shared by all cc
|
35 | 35 | /// compilation.
|
36 | 36 | fn new() -> &'static Self {
|
37 |
| - // TODO: Replace with a OnceLock once MSRV is 1.70 |
38 |
| - static INIT: Once = Once::new(); |
39 |
| - static mut JOBSERVER: MaybeUninit<JobTokenServer> = MaybeUninit::uninit(); |
40 |
| - |
41 |
| - unsafe { |
42 |
| - INIT.call_once(|| { |
43 |
| - let server = inherited_jobserver::JobServer::from_env() |
44 |
| - .map(Self::Inherited) |
45 |
| - .unwrap_or_else(|| Self::InProcess(inprocess_jobserver::JobServer::new())); |
46 |
| - JOBSERVER.write(server); |
47 |
| - }); |
48 |
| - JOBSERVER.assume_init_ref() |
49 |
| - } |
| 37 | + static JOBSERVER: OnceLock<JobTokenServer> = OnceLock::new(); |
| 38 | + |
| 39 | + JOBSERVER.get_or_init(|| { |
| 40 | + unsafe { inherited_jobserver::JobServer::from_env() } |
| 41 | + .map(Self::Inherited) |
| 42 | + .unwrap_or_else(|| Self::InProcess(inprocess_jobserver::JobServer::new())) |
| 43 | + }) |
50 | 44 | }
|
51 | 45 | }
|
52 | 46 |
|
@@ -76,12 +70,9 @@ impl ActiveJobTokenServer {
|
76 | 70 | }
|
77 | 71 |
|
78 | 72 | mod inherited_jobserver {
|
79 |
| - use super::JobToken; |
| 73 | + use super::{JobToken, OnceLock}; |
80 | 74 |
|
81 |
| - use crate::{ |
82 |
| - parallel::{async_executor::YieldOnce, once_lock::OnceLock}, |
83 |
| - Error, ErrorKind, |
84 |
| - }; |
| 75 | + use crate::{parallel::async_executor::YieldOnce, Error, ErrorKind}; |
85 | 76 |
|
86 | 77 | use std::{
|
87 | 78 | io, mem,
|
|
0 commit comments