diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-08-11 07:51:52 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-11 07:51:52 +0200 |
| commit | 2c88eb9805c172f436ac3694b7059db5f4748804 (patch) | |
| tree | cf76b0affb89c687c33b929c4905f25d8adc1b5f | |
| parent | eff9120b7c506ded05ec2b35e6606d966797aecf (diff) | |
| parent | ae09340350fd8b7aa7a00a81132a7e77772504cb (diff) | |
| download | rust-2c88eb9805c172f436ac3694b7059db5f4748804.tar.gz rust-2c88eb9805c172f436ac3694b7059db5f4748804.zip | |
Rollup merge of #128882 - RalfJung:local-waker-will-wake, r=cuviper
make LocalWaker::will_wake consistent with Waker::will_wake This mirrors https://github.com/rust-lang/rust/pull/119863 for `LocalWaker`. Looks like that got missed in the initial `LocalWaker` PR (https://github.com/rust-lang/rust/pull/118960).
| -rw-r--r-- | library/core/src/task/wake.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/library/core/src/task/wake.rs b/library/core/src/task/wake.rs index 8ce3eb2ea39..29932c0d1ff 100644 --- a/library/core/src/task/wake.rs +++ b/library/core/src/task/wake.rs @@ -502,6 +502,8 @@ impl Waker { #[must_use] #[stable(feature = "futures_api", since = "1.36.0")] pub fn will_wake(&self, other: &Waker) -> bool { + // We optimize this by comparing vtable addresses instead of vtable contents. + // This is permitted since the function is documented as best-effort. let RawWaker { data: a_data, vtable: a_vtable } = self.waker; let RawWaker { data: b_data, vtable: b_vtable } = other.waker; a_data == b_data && ptr::eq(a_vtable, b_vtable) @@ -761,7 +763,11 @@ impl LocalWaker { #[must_use] #[unstable(feature = "local_waker", issue = "118959")] pub fn will_wake(&self, other: &LocalWaker) -> bool { - self.waker == other.waker + // We optimize this by comparing vtable addresses instead of vtable contents. + // This is permitted since the function is documented as best-effort. + let RawWaker { data: a_data, vtable: a_vtable } = self.waker; + let RawWaker { data: b_data, vtable: b_vtable } = other.waker; + a_data == b_data && ptr::eq(a_vtable, b_vtable) } /// Creates a new `LocalWaker` from [`RawWaker`]. |
