net/can: Release IOB when failed to queue in datahandler

If we just clear the IOB when failed to queue, we'll leak it.

Signed-off-by: Zhe Weng <wengzhe@xiaomi.com>
This commit is contained in:
Zhe Weng 2023-12-27 10:43:11 +08:00 committed by Xiang Xiao
parent af15cd40aa
commit 1adfc1ae79

@ -214,11 +214,16 @@ uint16_t can_datahandler(FAR struct net_driver_s *dev,
can_readahead_signal(conn);
#endif
ret = iob->io_pktlen;
/* Device buffer has been enqueued, clear the handle */
netdev_iob_clear(dev);
}
else
{
nerr("ERROR: Failed to queue the I/O buffer chain: %d\n", ret);
netdev_iob_release(dev);
}
/* Device buffer must be enqueue or freed, clear the handle */
netdev_iob_clear(dev);
return ret;
}