Dear Ferruh, Maybe I'm wrong, but I cannot see your point. The code is absolutely the same, only the following line
if (eth_dev->data) { is actually removed. fulvio On 02/11/2016 12:38, Ferruh Yigit wrote: > Hi Mauricio, > > On 11/1/2016 7:55 PM, Mauricio Vasquez B wrote: >> Coverity detected this as an issue because internals->data will never be >> NULL, >> then the check is not necessary. >> >> Fixes: d082c0395bf6 ("ring: fix memory leak when detaching") >> Coverity issue: 137873 >> >> Signed-off-by: Mauricio Vasquez B <mauricio.vasquez at polito.it> >> --- >> drivers/net/ring/rte_eth_ring.c | 20 +++++++++----------- >> 1 file changed, 9 insertions(+), 11 deletions(-) >> >> diff --git a/drivers/net/ring/rte_eth_ring.c >> b/drivers/net/ring/rte_eth_ring.c >> index 6d2a8c1..5ca00ed 100644 >> --- a/drivers/net/ring/rte_eth_ring.c >> +++ b/drivers/net/ring/rte_eth_ring.c >> @@ -599,17 +599,15 @@ rte_pmd_ring_remove(const char *name) >> >> eth_dev_stop(eth_dev); >> >> - if (eth_dev->data) { >> - internals = eth_dev->data->dev_private; >> - if (internals->action == DEV_CREATE) { >> - /* >> - * it is only necessary to delete the rings in >> rx_queues because >> - * they are the same used in tx_queues >> - */ >> - for (i = 0; i < eth_dev->data->nb_rx_queues; i++) { >> - r = eth_dev->data->rx_queues[i]; >> - rte_ring_free(r->rng); >> - } >> + internals = eth_dev->data->dev_private; >> + if (internals->action == DEV_CREATE) { >> + /* >> + * it is only necessary to delete the rings in rx_queues because >> + * they are the same used in tx_queues >> + */ >> + for (i = 0; i < eth_dev->data->nb_rx_queues; i++) { >> + r = eth_dev->data->rx_queues[i]; >> + rte_ring_free(r->rng); >> } >> >> rte_free(eth_dev->data->rx_queues); > > This patch not only removes the NULL check but also changes the logic. > after patch rx_queues, tx_queues and dev_private only freed if action is > DEV_CREATE which is wrong. > >> >