@@ -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_cell :: OnceCell ;
6
6
7
7
pub ( crate ) struct JobToken ( PhantomData < ( ) > ) ;
8
8
@@ -163,7 +163,7 @@ 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 : OnceCell < Option < HelperThread > > ,
167
167
}
168
168
169
169
impl < ' a > ActiveJobServer < ' a > {
@@ -183,10 +183,30 @@ mod inherited_jobserver {
183
183
}
184
184
Ok ( None ) => YieldOnce :: default ( ) . await ,
185
185
Err ( err) if err. kind ( ) == io:: ErrorKind :: Unsupported => {
186
+ let mut err = None ;
186
187
// 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 ) ) ?;
188
+ let helper_thread = self . helper_thread . get_or_init ( || {
189
+ match HelperThread :: new ( self . jobserver ) {
190
+ Ok ( thread) => Some ( thread) ,
191
+ Err ( error) => {
192
+ err = Some ( error) ;
193
+ None
194
+ }
195
+ }
196
+ } ) ;
197
+
198
+ if let Some ( err) = err {
199
+ return Err ( err. into ( ) ) ;
200
+ }
201
+
202
+ let helper_thread = if let Some ( thread) = helper_thread {
203
+ thread
204
+ } else {
205
+ return Err ( Error :: new (
206
+ ErrorKind :: JobserverHelpThreadError ,
207
+ "Creation failed" ,
208
+ ) ) ;
209
+ } ;
190
210
191
211
match helper_thread. rx . try_recv ( ) {
192
212
Ok ( res) => {
0 commit comments