Store `Task::p` as `dyn FnOnce() + Send` · model-checking/verify-rust-std@55f3d10

@@ -28,14 +28,14 @@ mod task_queue {

2828

}

29293030

pub(super) struct Task {

31-

p: Box<dyn FnOnce()>,

31+

p: Box<dyn FnOnce() + Send>,

3232

done: JoinNotifier,

3333

}

34343535

unsafe impl Send for Task {}

36363737

impl Task {

38-

pub(super) fn new(p: Box<dyn FnOnce()>) -> (Task, JoinHandle) {

38+

pub(super) fn new(p: Box<dyn FnOnce() + Send>) -> (Task, JoinHandle) {

3939

let (done, recv) = wait_notify::new();

4040

let done = JoinNotifier(Some(done));

4141

(Task { p, done }, recv)

@@ -97,7 +97,7 @@ pub mod wait_notify {

97979898

impl 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> {

101101

let mut queue_lock = task_queue::lock();

102102

unsafe { usercalls::launch_thread()? };

103103

let (task, handle) = task_queue::Task::new(p);