@@ -2,7 +2,7 @@ use std::marker::PhantomData;
2
2
3
3
use crate :: Error ;
4
4
5
- use once_cell :: sync :: OnceCell ;
5
+ use super :: once_lock :: OnceLock ;
6
6
7
7
pub ( crate ) struct JobToken ( PhantomData < ( ) > ) ;
8
8
@@ -37,7 +37,7 @@ impl JobTokenServer {
37
37
/// compilation.
38
38
fn new ( ) -> & ' static Self {
39
39
// TODO: Replace with a OnceLock once MSRV is 1.70
40
- static JOBSERVER : OnceCell < JobTokenServer > = OnceCell :: new ( ) ;
40
+ static JOBSERVER : OnceLock < JobTokenServer > = OnceLock :: new ( ) ;
41
41
42
42
JOBSERVER . get_or_init ( || {
43
43
unsafe { inherited_jobserver:: JobServer :: from_env ( ) }
@@ -62,16 +62,16 @@ impl ActiveJobTokenServer {
62
62
}
63
63
}
64
64
65
- pub ( crate ) async fn acquire ( & self ) -> Result < JobToken , Error > {
66
- match & self {
65
+ pub ( crate ) async fn acquire ( & mut self ) -> Result < JobToken , Error > {
66
+ match self {
67
67
Self :: Inherited ( jobserver) => jobserver. acquire ( ) . await ,
68
68
Self :: InProcess ( jobserver) => Ok ( jobserver. acquire ( ) . await ) ,
69
69
}
70
70
}
71
71
}
72
72
73
73
mod inherited_jobserver {
74
- use super :: { JobToken , OnceCell } ;
74
+ use super :: JobToken ;
75
75
76
76
use crate :: { parallel:: async_executor:: YieldOnce , Error , ErrorKind } ;
77
77
@@ -137,7 +137,7 @@ mod inherited_jobserver {
137
137
pub ( super ) fn enter_active ( & self ) -> ActiveJobServer < ' _ > {
138
138
ActiveJobServer {
139
139
jobserver : self ,
140
- helper_thread : OnceCell :: new ( ) ,
140
+ helper_thread : None ,
141
141
}
142
142
}
143
143
}
@@ -163,11 +163,11 @@ mod inherited_jobserver {
163
163
164
164
pub ( crate ) struct ActiveJobServer < ' a > {
165
165
jobserver : & ' a JobServer ,
166
- helper_thread : OnceCell < HelperThread > ,
166
+ helper_thread : Option < HelperThread > ,
167
167
}
168
168
169
169
impl < ' a > ActiveJobServer < ' a > {
170
- pub ( super ) async fn acquire ( & self ) -> Result < JobToken , Error > {
170
+ pub ( super ) async fn acquire ( & mut self ) -> Result < JobToken , Error > {
171
171
let mut has_requested_token = false ;
172
172
173
173
loop {
@@ -184,9 +184,12 @@ mod inherited_jobserver {
184
184
Ok ( None ) => YieldOnce :: default ( ) . await ,
185
185
Err ( err) if err. kind ( ) == io:: ErrorKind :: Unsupported => {
186
186
// Fallback to creating a help thread with blocking acquire
187
- let helper_thread = self
188
- . helper_thread
189
- . get_or_try_init ( || HelperThread :: new ( self . jobserver ) ) ?;
187
+ let helper_thread = if let Some ( thread) = self . helper_thread . as_ref ( ) {
188
+ thread
189
+ } else {
190
+ self . helper_thread
191
+ . insert ( HelperThread :: new ( self . jobserver ) ?)
192
+ } ;
190
193
191
194
match helper_thread. rx . try_recv ( ) {
192
195
Ok ( res) => {
0 commit comments