Skip to content

Commit a66bd9d

Browse files
committed
revert change to see if it help ci failure
1 parent 0b35430 commit a66bd9d

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

crates/bevy_tasks/src/task_pool.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::{
22
future::Future,
33
marker::PhantomData,
44
mem,
5+
pin::Pin,
56
sync::Arc,
67
thread::{self, JoinHandle},
78
};
@@ -279,8 +280,23 @@ impl TaskPool {
279280
// Pin the futures on the stack.
280281
pin!(get_results);
281282

283+
// SAFETY: This function blocks until all futures complete, so we do not read/write
284+
// the data from futures outside of the 'scope lifetime. However,
285+
// rust has no way of knowing this so we must convert to 'static
286+
// here to appease the compiler as it is unable to validate safety.
287+
let get_results: Pin<&mut (dyn Future<Output = Vec<T>> + 'static + Send)> = get_results;
288+
let get_results: Pin<&'static mut (dyn Future<Output = Vec<T>> + 'static + Send)> =
289+
unsafe { mem::transmute(get_results) };
290+
291+
// The thread that calls scope() will participate in driving tasks in the pool
292+
// forward until the tasks that are spawned by this scope() call
293+
// complete. (If the caller of scope() happens to be a thread in
294+
// this thread pool, and we only have one thread in the pool, then
295+
// simply calling future::block_on(spawned) would deadlock.)
296+
let mut spawned = task_scope_executor.spawn(get_results);
297+
282298
loop {
283-
if let Some(result) = future::block_on(future::poll_once(&mut get_results)) {
299+
if let Some(result) = future::block_on(future::poll_once(&mut spawned)) {
284300
break result;
285301
};
286302

0 commit comments

Comments
 (0)