diff --git a/futures-task/src/waker.rs b/futures-task/src/waker.rs index b1410a1927..747457a521 100644 --- a/futures-task/src/waker.rs +++ b/futures-task/src/waker.rs @@ -36,6 +36,7 @@ unsafe fn increase_refcount(data: *const ()) { } // used by `waker_ref` +#[inline(always)] unsafe fn clone_arc_raw(data: *const ()) -> RawWaker { unsafe { increase_refcount::(data) } RawWaker::new(data, waker_vtable::()) diff --git a/futures/tests/task_arc_wake.rs b/futures/tests/task_arc_wake.rs index 36c7c67bc9..aedc15bcb8 100644 --- a/futures/tests/task_arc_wake.rs +++ b/futures/tests/task_arc_wake.rs @@ -44,18 +44,17 @@ fn create_from_arc() { assert_eq!(1, Arc::strong_count(&some_w)); } -// TODO: rustc regression: https://github.com/rust-lang/rust/issues/121600 -// #[test] -// fn ref_wake_same() { -// let some_w = Arc::new(CountingWaker::new()); -// -// let w1: Waker = task::waker(some_w.clone()); -// let w2 = task::waker_ref(&some_w); -// let w3 = w2.clone(); -// -// assert!(w1.will_wake(&w2)); -// assert!(w2.will_wake(&w3)); -// } +#[test] +fn ref_wake_same() { + let some_w = Arc::new(CountingWaker::new()); + + let w1: Waker = task::waker(some_w.clone()); + let w2 = task::waker_ref(&some_w); + let w3 = w2.clone(); + + assert!(w1.will_wake(&w2)); + assert!(w2.will_wake(&w3)); +} #[test] fn proper_refcount_on_wake_panic() {