From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: Re: [dpdk-stable] [PATCH v3] lib/efd: fix to free tail queue entry after use Date: Mon, 14 Jan 2019 23:30:18 +0100 Message-ID: <2704785.Ctf98vYVr8@xps> References: <1542109533-14283-1-git-send-email-hari.kumarx.vemula@intel.com> <1547207341-22001-1-git-send-email-hari.kumarx.vemula@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7Bit Cc: stable@dpdk.org, Hari Kumar Vemula , dev@dpdk.org, reshma.pattan@intel.com, jananeex.m.parthasarathy@intel.com, maxime.coquelin@redhat.com To: byron.marohn@intel.com, pablo.de.lara.guarch@intel.com Return-path: In-Reply-To: <1547207341-22001-1-git-send-email-hari.kumarx.vemula@intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Any review please? 11/01/2019 12:49, Hari Kumar Vemula: > In rte_efd_create() allocated memory for tail queue entry but > not freed. > Added freeing the tail queue entry. > > Fixes: 56b6ef874f80 ("efd: new Elastic Flow Distributor library") > Cc: stable@dpdk.org > > Signed-off-by: Hari Kumar Vemula > Acked-by: Reshma Pattan > > --- > v3: Replaced TAILQ_FOREACH_SAFE with TAILQ_FOREACH > v2: Updated commit message. > --- > lib/librte_efd/rte_efd.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/lib/librte_efd/rte_efd.c b/lib/librte_efd/rte_efd.c > index e6e5cfda2..8b8330e0b 100644 > --- a/lib/librte_efd/rte_efd.c > +++ b/lib/librte_efd/rte_efd.c > @@ -740,17 +740,32 @@ void > rte_efd_free(struct rte_efd_table *table) > { > uint8_t socket_id; > + struct rte_efd_list *efd_list; > + struct rte_tailq_entry *te, *temp; > > if (table == NULL) > return; > > + efd_list = RTE_TAILQ_CAST(rte_efd_tailq.head, rte_efd_list); > + > for (socket_id = 0; socket_id < RTE_MAX_NUMA_NODES; socket_id++) > rte_free(table->chunks[socket_id]); > + rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK); > > + TAILQ_FOREACH_SAFE(te, efd_list, next, temp) { > + if (te->data == (void *) table) { > + TAILQ_REMOVE(efd_list, te, next); > + rte_free(te); > + te = NULL; > + } > + } > + > + rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK); > rte_ring_free(table->free_slots); > rte_free(table->offline_chunks); > rte_free(table->keys); > rte_free(table); > + > } > > /** >