Store Task::p
as dyn FnOnce() + Send
· model-checking/verify-rust-std@55f3d10 (original) (raw)
`@@ -28,14 +28,14 @@ mod task_queue {
`
28
28
`}
`
29
29
``
30
30
`pub(super) struct Task {
`
31
``
`-
p: Box<dyn FnOnce()>,
`
``
31
`+
p: Box<dyn FnOnce() + Send>,
`
32
32
`done: JoinNotifier,
`
33
33
`}
`
34
34
``
35
35
`unsafe impl Send for Task {}
`
36
36
``
37
37
`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) {
`
39
39
`let (done, recv) = wait_notify::new();
`
40
40
`let done = JoinNotifier(Some(done));
`
41
41
`(Task { p, done }, recv)
`
`@@ -97,7 +97,7 @@ pub mod wait_notify {
`
97
97
``
98
98
`impl Thread {
`
99
99
`// unsafe: see thread::Builder::spawn_unchecked for safety requirements
`
100
``
`-
pub unsafe fn new(_stack: usize, p: Box<dyn FnOnce()>) -> io::Result {
`
``
100
`+
pub unsafe fn new(_stack: usize, p: Box<dyn FnOnce() + Send>) -> io::Result {
`
101
101
`let mut queue_lock = task_queue::lock();
`
102
102
`unsafe { usercalls::launch_thread()? };
`
103
103
`let (task, handle) = task_queue::Task::new(p);
`