libasync/smoltcp/mod: prevent duplicated wakers
This commit is contained in:
parent
c13ca614ef
commit
39f672dde8
|
@ -81,7 +81,14 @@ impl Sockets {
|
||||||
/// TODO: this was called through eg. TcpStream, another poll()
|
/// TODO: this was called through eg. TcpStream, another poll()
|
||||||
/// might want to send packets before sleeping for an interrupt.
|
/// might want to send packets before sleeping for an interrupt.
|
||||||
pub(crate) fn register_waker(waker: Waker) {
|
pub(crate) fn register_waker(waker: Waker) {
|
||||||
Self::instance().wakers.borrow_mut()
|
let mut wakers = Self::instance().wakers.borrow_mut();
|
||||||
.push(waker);
|
for (i, w) in wakers.iter().enumerate() {
|
||||||
|
if w.will_wake(&waker) {
|
||||||
|
let last = wakers.len() - 1;
|
||||||
|
wakers.swap(i, last);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wakers.push(waker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue