@@ -502,6 +502,8 @@ impl Waker { |
|
|
502 |
502 |
#[must_use] |
503 |
503 |
#[stable(feature = "futures_api", since = "1.36.0")] |
504 |
504 |
pub fn will_wake(&self, other: &Waker) -> bool { |
|
505 |
+// We optimize this by comparing vtable addresses instead of vtable contents. |
|
506 |
+// This is permitted since the function is documented as best-effort. |
505 |
507 |
let RawWaker { data: a_data, vtable: a_vtable } = self.waker; |
506 |
508 |
let RawWaker { data: b_data, vtable: b_vtable } = other.waker; |
507 |
509 |
a_data == b_data && ptr::eq(a_vtable, b_vtable) |
@@ -761,7 +763,11 @@ impl LocalWaker { |
|
|
761 |
763 |
#[must_use] |
762 |
764 |
#[unstable(feature = "local_waker", issue = "118959")] |
763 |
765 |
pub fn will_wake(&self, other: &LocalWaker) -> bool { |
764 |
|
-self.waker == other.waker |
|
766 |
+// We optimize this by comparing vtable addresses instead of vtable contents. |
|
767 |
+// This is permitted since the function is documented as best-effort. |
|
768 |
+let RawWaker { data: a_data, vtable: a_vtable } = self.waker; |
|
769 |
+let RawWaker { data: b_data, vtable: b_vtable } = other.waker; |
|
770 |
+ a_data == b_data && ptr::eq(a_vtable, b_vtable) |
765 |
771 |
} |
766 |
772 |
|
767 |
773 |
/// Creates a new `LocalWaker` from [`RawWaker`]. |