diff --git a/src/api/tcpip.c b/src/api/tcpip.c index 1740861c..743553a5 100644 --- a/src/api/tcpip.c +++ b/src/api/tcpip.c @@ -171,7 +171,9 @@ tcpip_thread_handle_msg(struct tcpip_msg *msg) #if !LWIP_TCPIP_CORE_LOCKING_INPUT case TCPIP_MSG_INPKT: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: PACKET %p\n", (void *)msg)); - msg->msg.inp.input_fn(msg->msg.inp.p, msg->msg.inp.netif); + if (msg->msg.inp.input_fn(msg->msg.inp.p, msg->msg.inp.netif) != ERR_OK) { + pbuf_free(msg->msg.inp.p); + } memp_free(MEMP_TCPIP_MSG_INPKT, msg); break; #endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */ diff --git a/src/include/lwip/netif.h b/src/include/lwip/netif.h index 59d518c9..fba4fd7d 100644 --- a/src/include/lwip/netif.h +++ b/src/include/lwip/netif.h @@ -171,6 +171,9 @@ typedef err_t (*netif_init_fn)(struct netif *netif); * * @param p The received packet, copied into a pbuf * @param inp The netif which received the packet + * @return ERR_OK if the packet was handled + * != ERR_OK is the packet was NOT handled, in this case, the caller has + * to free the pbuf */ typedef err_t (*netif_input_fn)(struct pbuf *p, struct netif *inp);