Another offender is AtomicWaker [1] which does the same on contention.
In the common case, the waker side will operate some logic like:
set_flag();
atomic_waker.wake();
and the future will run: atomic_waker.register(cx.waker());
if flag_is_set() {
Poll::Ready(())
} else {
Poll::Pending
}
Thus, even if `register` decides to “spin”, the flag will already be set, and so the future will not spin in reality (it may be polled unnecessarily, but this will only happen once).I can’t immediately think of examples where support for spurious waking is necessary.