File tree Expand file tree Collapse file tree 1 file changed +12
-1
lines changed Expand file tree Collapse file tree 1 file changed +12
-1
lines changed Original file line number Diff line number Diff line change @@ -506,7 +506,18 @@ pub fn run_test(
506
506
let supports_threads = !cfg ! ( target_os = "emscripten" ) && !cfg ! ( target_arch = "wasm32" ) ;
507
507
if concurrency == Concurrent :: Yes && supports_threads {
508
508
let cfg = thread:: Builder :: new ( ) . name ( name. as_slice ( ) . to_owned ( ) ) ;
509
- Some ( cfg. spawn ( runtest) . unwrap ( ) )
509
+ let mut runtest = Arc :: new ( Mutex :: new ( Some ( runtest) ) ) ;
510
+ let runtest2 = runtest. clone ( ) ;
511
+ match cfg. spawn ( move || runtest2. lock ( ) . unwrap ( ) . take ( ) . unwrap ( ) ( ) ) {
512
+ Ok ( handle) => Some ( handle) ,
513
+ Err ( e) if e. kind ( ) == io:: ErrorKind :: WouldBlock => {
514
+ // `ErrorKind::WouldBlock` means hitting the thread limit on some
515
+ // platforms, so run the test synchronously here instead.
516
+ Arc :: get_mut ( & mut runtest) . unwrap ( ) . get_mut ( ) . unwrap ( ) . take ( ) . unwrap ( ) ( ) ;
517
+ None
518
+ }
519
+ Err ( e) => panic ! ( "failed to spawn thread to run test: {}" , e) ,
520
+ }
510
521
} else {
511
522
runtest ( ) ;
512
523
None
You can’t perform that action at this time.
0 commit comments