summaryrefslogtreecommitdiffstats
path: root/vendor/rayon-core/src/job.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/rayon-core/src/job.rs')
-rw-r--r--vendor/rayon-core/src/job.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/vendor/rayon-core/src/job.rs b/vendor/rayon-core/src/job.rs
index b7a3dae18..5664bb385 100644
--- a/vendor/rayon-core/src/job.rs
+++ b/vendor/rayon-core/src/job.rs
@@ -30,7 +30,6 @@ pub(super) trait Job {
/// Internally, we store the job's data in a `*const ()` pointer. The
/// true type is something like `*const StackJob<...>`, but we hide
/// it. We also carry the "execute fn" from the `Job` trait.
-#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub(super) struct JobRef {
pointer: *const (),
execute_fn: unsafe fn(*const ()),
@@ -53,6 +52,13 @@ impl JobRef {
}
}
+ /// Returns an opaque handle that can be saved and compared,
+ /// without making `JobRef` itself `Copy + Eq`.
+ #[inline]
+ pub(super) fn id(&self) -> impl Eq {
+ (self.pointer, self.execute_fn)
+ }
+
#[inline]
pub(super) unsafe fn execute(self) {
(self.execute_fn)(self.pointer)
@@ -112,7 +118,7 @@ where
let abort = unwind::AbortIfPanic;
let func = (*this.func.get()).take().unwrap();
(*this.result.get()) = JobResult::call(func);
- this.latch.set();
+ Latch::set(&this.latch);
mem::forget(abort);
}
}