@@ -637,7 +637,7 @@ pub(crate) mod _thread {
637637 let ( lock, cvar) = & * done_event;
638638 let mut done = lock. lock ( ) ;
639639 while !* done {
640- cvar. wait ( & mut done) ;
640+ vm . allow_threads ( || cvar. wait ( & mut done) ) ;
641641 }
642642 }
643643 None => break , // No more threads to wait on
@@ -1178,14 +1178,14 @@ pub(crate) mod _thread {
11781178
11791179 while !* done {
11801180 if let Some ( timeout) = timeout_duration {
1181- let result = cvar. wait_for ( & mut done, timeout) ;
1181+ let result = vm . allow_threads ( || cvar. wait_for ( & mut done, timeout) ) ;
11821182 if result. timed_out ( ) && !* done {
11831183 // Timeout occurred and done is still false
11841184 return Ok ( ( ) ) ;
11851185 }
11861186 } else {
11871187 // Infinite wait
1188- cvar. wait ( & mut done) ;
1188+ vm . allow_threads ( || cvar. wait ( & mut done) ) ;
11891189 }
11901190 }
11911191 drop ( done) ;
@@ -1206,7 +1206,7 @@ pub(crate) mod _thread {
12061206 let ( lock, cvar) = & * self . done_event ;
12071207 let mut done = lock. lock ( ) ;
12081208 while !* done {
1209- cvar. wait ( & mut done) ;
1209+ vm . allow_threads ( || cvar. wait ( & mut done) ) ;
12101210 }
12111211 return Ok ( ( ) ) ;
12121212 }
@@ -1221,7 +1221,7 @@ pub(crate) mod _thread {
12211221 // Perform the actual join outside the lock
12221222 if let Some ( handle) = join_handle {
12231223 // Ignore the result - panics in spawned threads are already handled
1224- let _ = handle. join ( ) ;
1224+ let _ = vm . allow_threads ( || handle. join ( ) ) ;
12251225 }
12261226
12271227 // Mark as joined and clear joining flag
0 commit comments