mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-12-26 03:16:18 +00:00
PPP, PPPoS: only check open flag after events that may have changed it
Speed-up a little bit the PPPoS input parser by only checking the open flag after calling the ppp_input function, the only one that can induce a state change here.
This commit is contained in:
parent
22f13c24aa
commit
a9f19cd7f1
@ -489,20 +489,21 @@ pppos_input(ppp_pcb *ppp, const void *s, int l)
|
|||||||
LWIP_ASSERT_CORE_LOCKED();
|
LWIP_ASSERT_CORE_LOCKED();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Don't even bother parsing data if we are disconnected.
|
||||||
|
* Added to that, ppp_input must never be called if the upper layer is down.
|
||||||
|
*/
|
||||||
|
PPPOS_PROTECT(lev);
|
||||||
|
if (!pppos->open) {
|
||||||
|
PPPOS_UNPROTECT(lev);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PPPOS_UNPROTECT(lev);
|
||||||
|
|
||||||
PPPDEBUG(LOG_DEBUG, ("pppos_input[%d]: got %d bytes\n", ppp->netif->num, l));
|
PPPDEBUG(LOG_DEBUG, ("pppos_input[%d]: got %d bytes\n", ppp->netif->num, l));
|
||||||
while (l-- > 0) {
|
while (l-- > 0) {
|
||||||
cur_char = *s_u8++;
|
cur_char = *s_u8++;
|
||||||
|
|
||||||
PPPOS_PROTECT(lev);
|
PPPOS_PROTECT(lev);
|
||||||
/* ppp_input can disconnect the interface, we need to abort to prevent a memory
|
|
||||||
* leak if there are remaining bytes because pppos_connect and pppos_listen
|
|
||||||
* functions expect input buffer to be free. Furthermore there are no real
|
|
||||||
* reason to continue reading bytes if we are disconnected.
|
|
||||||
*/
|
|
||||||
if (!pppos->open) {
|
|
||||||
PPPOS_UNPROTECT(lev);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
escaped = ESCAPE_P(pppos->in_accm, cur_char);
|
escaped = ESCAPE_P(pppos->in_accm, cur_char);
|
||||||
PPPOS_UNPROTECT(lev);
|
PPPOS_UNPROTECT(lev);
|
||||||
|
|
||||||
@ -582,6 +583,14 @@ pppos_input(ppp_pcb *ppp, const void *s, int l)
|
|||||||
}
|
}
|
||||||
#else /* PPP_INPROC_IRQ_SAFE */
|
#else /* PPP_INPROC_IRQ_SAFE */
|
||||||
ppp_input(ppp, inp);
|
ppp_input(ppp, inp);
|
||||||
|
/* ppp_input can disconnect the interface, we need to abort to prevent a memory
|
||||||
|
* leak if there are remaining bytes because pppos_connect and pppos_listen
|
||||||
|
* functions expect input buffer to be free. Furthermore there are no real
|
||||||
|
* reason to continue reading bytes if we are disconnected.
|
||||||
|
*/
|
||||||
|
if (!pppos->open) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
#endif /* PPP_INPROC_IRQ_SAFE */
|
#endif /* PPP_INPROC_IRQ_SAFE */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user