Store `Task::p` as `dyn FnOnce() + Send` · model-checking/verify-rust-std@55f3d10
@@ -28,14 +28,14 @@ mod task_queue {
2828}
29293030pub(super) struct Task {
31-p: Box<dyn FnOnce()>,
31+p: Box<dyn FnOnce() + Send>,
3232done: JoinNotifier,
3333}
34343535unsafe impl Send for Task {}
36363737impl Task {
38-pub(super) fn new(p: Box<dyn FnOnce()>) -> (Task, JoinHandle) {
38+pub(super) fn new(p: Box<dyn FnOnce() + Send>) -> (Task, JoinHandle) {
3939let (done, recv) = wait_notify::new();
4040let done = JoinNotifier(Some(done));
4141(Task { p, done }, recv)
@@ -97,7 +97,7 @@ pub mod wait_notify {
97979898impl Thread {
9999// unsafe: see thread::Builder::spawn_unchecked for safety requirements
100-pub unsafe fn new(_stack: usize, p: Box<dyn FnOnce()>) -> io::Result<Thread> {
100+pub unsafe fn new(_stack: usize, p: Box<dyn FnOnce() + Send>) -> io::Result<Thread> {
101101let mut queue_lock = task_queue::lock();
102102unsafe { usercalls::launch_thread()? };
103103let (task, handle) = task_queue::Task::new(p);