@@ -2,7 +2,7 @@ use std::marker::PhantomData;
22
33use crate :: Error ;
44
5- use once_cell :: sync :: OnceCell ;
5+ use super :: once_lock :: OnceLock ;
66
77pub ( crate ) struct JobToken ( PhantomData < ( ) > ) ;
88
@@ -37,7 +37,7 @@ impl JobTokenServer {
3737 /// compilation.
3838 fn new ( ) -> & ' static Self {
3939 // TODO: Replace with a OnceLock once MSRV is 1.70
40- static JOBSERVER : OnceCell < JobTokenServer > = OnceCell :: new ( ) ;
40+ static JOBSERVER : OnceLock < JobTokenServer > = OnceLock :: new ( ) ;
4141
4242 JOBSERVER . get_or_init ( || {
4343 unsafe { inherited_jobserver:: JobServer :: from_env ( ) }
@@ -62,16 +62,16 @@ impl ActiveJobTokenServer {
6262 }
6363 }
6464
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 {
6767 Self :: Inherited ( jobserver) => jobserver. acquire ( ) . await ,
6868 Self :: InProcess ( jobserver) => Ok ( jobserver. acquire ( ) . await ) ,
6969 }
7070 }
7171}
7272
7373mod inherited_jobserver {
74- use super :: { JobToken , OnceCell } ;
74+ use super :: JobToken ;
7575
7676 use crate :: { parallel:: async_executor:: YieldOnce , Error , ErrorKind } ;
7777
@@ -137,7 +137,7 @@ mod inherited_jobserver {
137137 pub ( super ) fn enter_active ( & self ) -> ActiveJobServer < ' _ > {
138138 ActiveJobServer {
139139 jobserver : self ,
140- helper_thread : OnceCell :: new ( ) ,
140+ helper_thread : None ,
141141 }
142142 }
143143 }
@@ -163,11 +163,11 @@ mod inherited_jobserver {
163163
164164 pub ( crate ) struct ActiveJobServer < ' a > {
165165 jobserver : & ' a JobServer ,
166- helper_thread : OnceCell < HelperThread > ,
166+ helper_thread : Option < HelperThread > ,
167167 }
168168
169169 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 > {
171171 let mut has_requested_token = false ;
172172
173173 loop {
@@ -184,9 +184,12 @@ mod inherited_jobserver {
184184 Ok ( None ) => YieldOnce :: default ( ) . await ,
185185 Err ( err) if err. kind ( ) == io:: ErrorKind :: Unsupported => {
186186 // 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+ } ;
190193
191194 match helper_thread. rx . try_recv ( ) {
192195 Ok ( res) => {
0 commit comments