Hi, Jeff > -----Original Message----- > From: Jeff Guo [mailto:jia....@intel.com] > Sent: Friday, July 3, 2020 2:05 PM > To: wangyunjian <wangyunj...@huawei.com>; dev@dpdk.org > Cc: Lilijun (Jerry) <jerry.lili...@huawei.com>; xudingke > <xudin...@huawei.com>; sta...@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v3 1/2] eal: fix memory leak when removing > event_cb > > hi, yunjian > > On 7/2/2020 7:47 PM, wangyunjian wrote: > > From: Yunjian Wang <wangyunj...@huawei.com> > > > > The event_cb->dev_name is not freed when freeing event_cb, and this > > causes a memory leak. > > > > Fixes: a753e53d517b ("eal: add device event monitor framework") > > Cc: sta...@dpdk.org > > > > Signed-off-by: Yunjian Wang <wangyunj...@huawei.com> > > --- > > lib/librte_eal/common/eal_common_dev.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/lib/librte_eal/common/eal_common_dev.c > > b/lib/librte_eal/common/eal_common_dev.c > > index 9e4f09d..4cfdb80 100644 > > --- a/lib/librte_eal/common/eal_common_dev.c > > +++ b/lib/librte_eal/common/eal_common_dev.c > > @@ -526,6 +526,8 @@ static int cmp_dev_name(const struct rte_device > *dev, const void *_name) > > */ > > if (event_cb->active == 0) { > > TAILQ_REMOVE(&dev_event_cbs, event_cb, next); > > + if (event_cb->dev_name) > > + free(event_cb->dev_name); > > free(event_cb); > > ret++; > > } else { > > > After you check, don't you think the memory leak would not occur in > rte_dev_event_callback_register when free event_cb? And if you have find > other same problem, suggest to fix it wholly by this good chance. Thanks. >
Yes, I've confirmed that it's not necessary. The 'event_cb->dev_name' is not allocated memory on error path in rte_dev_event_callback_register(). But I find the return value is wrong, when the callback is already exist, will include it in next version. The similar bugs I found in other codes will be fixed in another patches. Thanks, Yunjian > int > rte_dev_event_callback_register(const char *device_name, > rte_dev_event_cb_fn cb_fn, > void *cb_arg) > { > > error: > free(event_cb); > rte_spinlock_unlock(&dev_event_lock); > return ret; > > }