/// Registers the timer future at the Timer.
/// This function is only safe as long as the `wait_node`s address is guaranteed
/// to be stable until it gets removed from the queue.
Registers the timer future at the Timer.
This function is only safe as long as the `wait_node`s address is guaranteed
to be stable until it gets removed from the queue.
Registers the timer future at the Timer . This function is only safe as long as the ` wait_node ` s address is guaranteed to be stable until it gets removed from the queue .
unsafe fn try_wait(
        &mut self,
        wait_node: &mut HeapNode<TimerQueueEntry>,
        cx: &mut Context<'_>,
    ) -> Poll<()> {
        match wait_node.state {
            PollState::Unregistered => {
                let now = self.clock.now();
                if now >= wait_node.expiry {
                    // The timer is already expired
                    wait_node.state = PollState::Expired;
                    Poll::Ready(())
                } else {
                    // Added the task to the wait queue
                    wait_node.task = Some(cx.waker().clone());
                    wait_node.state = PollState::Registered;
                    self.waiters.insert(wait_node);
                    Poll::Pending
                }
            }
            PollState::Registered => {
                // Since the timer wakes up all waiters and moves their states to
                // Expired when the timer expired, it can't be expired here yet.
                // However the caller might have passed a different `Waker`.
                // In this case we need to update it.
                update_waker_ref(&mut wait_node.task, cx);
                Poll::Pending
            }
            PollState::Expired => Poll::Ready(()),
        }
    }
unsafe fn try_wait ( & mut self , wait_node : & mut HeapNode < TimerQueueEntry > , cx : & mut Context < ' _ > , ) -> Poll < ( ) > { match wait_node . state { PollState :: Unregistered => { let now = self . clock . now ( ) ; if now >= wait_node . expiry { // The timer is already expired wait_node . state = PollState :: Expired ; Poll :: Ready ( ( ) ) } else { // Added the task to the wait queue wait_node . task = Some ( cx . waker ( ) . clone ( ) ) ; wait_node . state = PollState :: Registered ; self . waiters . insert ( wait_node ) ; Poll :: Pending } } PollState :: Registered => { // Since the timer wakes up all waiters and moves their states to // Expired when the timer expired, it can't be expired here yet. // However the caller might have passed a different `Waker`. // In this case we need to update it. update_waker_ref ( & mut wait_node . task , cx ) ; Poll :: Pending } PollState :: Expired => Poll :: Ready ( ( ) ) , } }
Registers the timer future at the Timer.
Registers the timer future at the Timer .
&mut self
wait_node
&mut HeapNode<TimerQueueEntry>
cx
&mut Context<'_>