aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/defer.rs
blob: 4078512de7a032cf2f6ad735a9f68031d82b5775 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use std::task::Waker;

pub(crate) struct Defer {
    deferred: Vec<Waker>,
}

impl Defer {
    pub(crate) fn new() -> Defer {
        Defer {
            deferred: Default::default(),
        }
    }

    pub(crate) fn defer(&mut self, waker: Waker) {
        self.deferred.push(waker);
    }

    pub(crate) fn is_empty(&self) -> bool {
        self.deferred.is_empty()
    }

    pub(crate) fn wake(&mut self) {
        for waker in self.deferred.drain(..) {
            waker.wake();
        }
    }
}