net: fix incorrect poll_iface() calls
- poll_iface might be called by interrupt while poll_iface was being called in main loop - Disable interrupt when poll_iface is being processed - Only use IfacePollTimer to poll_iface
This commit is contained in:
parent
c86d67b15c
commit
51913f2e2f
|
@ -220,7 +220,9 @@ impl ServerHandle {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn poll_iface(&mut self) {
|
pub fn poll_iface(&mut self) {
|
||||||
|
cortex_m::interrupt::free(|_| {
|
||||||
self.iface.poll(now_fn(), &mut &mut self.dma, &mut self.socket_set);
|
self.iface.poll(now_fn(), &mut &mut self.dma, &mut self.socket_set);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn poll_at_iface(&mut self) -> Option<Instant> {
|
pub fn poll_at_iface(&mut self) -> Option<Instant> {
|
||||||
|
@ -246,8 +248,7 @@ impl ServerHandle {
|
||||||
if num_bytes > 0 {
|
if num_bytes > 0 {
|
||||||
match socket.send_slice(&buffer[..num_bytes]) {
|
match socket.send_slice(&buffer[..num_bytes]) {
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
self.poll_iface();
|
info!("Enqueued {} bytes.", num_bytes);
|
||||||
info!("Sent {} bytes.", num_bytes);
|
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
info!("Bytes cannot be sent. Error: {:?}", err)
|
info!("Bytes cannot be sent. Error: {:?}", err)
|
||||||
|
@ -515,11 +516,9 @@ pub fn for_each<F: FnMut(SocketHandle, usize)>(mut callback: F) {
|
||||||
#[interrupt]
|
#[interrupt]
|
||||||
fn ETH() {
|
fn ETH() {
|
||||||
let interrupt_reason = stm32_eth::eth_interrupt_handler();
|
let interrupt_reason = stm32_eth::eth_interrupt_handler();
|
||||||
cortex_m::interrupt::free(|_| {
|
|
||||||
if interrupt_reason.rx {
|
if interrupt_reason.rx {
|
||||||
eth_poll_iface();
|
eth_poll_iface();
|
||||||
}
|
}
|
||||||
});
|
|
||||||
debug!("Ethernet Interrupt{:?}", interrupt_reason);
|
debug!("Ethernet Interrupt{:?}", interrupt_reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue