From: E. Scott Daniels Date: Thu, 20 Oct 2016 13:34:41 +0000 (-0400) Subject: ethdev: prevent duplicate event callback X-Git-Tag: spdx-start~5497 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=dbffbf80e99aad7c7a5ffaf78e750ae69963f9e0;p=dpdk.git ethdev: prevent duplicate event callback This change prevents the attempt to add a structure which is already on the callback list. If a struct with matching parameters is found on the list, then no action is taken. Fixes: ac2f69c ("ethdev: fix crash if malloc of user callback fails") Signed-off-by: E. Scott Daniels Acked-by: Wenzhuo Lu --- diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index 0d9d9c1a71..fde8112f12 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -2449,14 +2449,15 @@ rte_eth_dev_callback_register(uint8_t port_id, } /* create a new callback. */ - if (user_cb == NULL) + if (user_cb == NULL) { user_cb = rte_zmalloc("INTR_USER_CALLBACK", sizeof(struct rte_eth_dev_callback), 0); - if (user_cb != NULL) { - user_cb->cb_fn = cb_fn; - user_cb->cb_arg = cb_arg; - user_cb->event = event; - TAILQ_INSERT_TAIL(&(dev->link_intr_cbs), user_cb, next); + if (user_cb != NULL) { + user_cb->cb_fn = cb_fn; + user_cb->cb_arg = cb_arg; + user_cb->event = event; + TAILQ_INSERT_TAIL(&(dev->link_intr_cbs), user_cb, next); + } } rte_spinlock_unlock(&rte_eth_dev_cb_lock);