[PATCH v2 07/12] net/memif: reset FD in interrupt handle
David Marchand
david.marchand at redhat.com
Sat Oct 24 15:21:32 CEST 2026
Clear FD references before freeing interrupt handles to avoid
spurious leak warnings. In error paths where the socket fd is
closed separately, clear the reference. In cleanup paths, use
rte_intr_fd_close() to close and clear in one call.
Fixes: d770ee9caed0 ("interrupts: warn on leaked FDs")
Signed-off-by: David Marchand <david.marchand at redhat.com>
---
drivers/net/memif/memif_socket.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/net/memif/memif_socket.c b/drivers/net/memif/memif_socket.c
index bd52a95473..b47c7a3b1b 100644
--- a/drivers/net/memif/memif_socket.c
+++ b/drivers/net/memif/memif_socket.c
@@ -638,7 +638,7 @@ memif_disconnect(struct rte_eth_dev *dev)
pmd->cc,
memif_intr_unregister_handler);
} else if (ret > 0) {
- close(rte_intr_fd_get(ih));
+ rte_intr_fd_close(ih);
rte_intr_instance_free(ih);
rte_free(pmd->cc);
}
@@ -962,6 +962,8 @@ memif_listener_handler(void *arg)
if (cc != NULL) {
rte_intr_callback_unregister(cc->intr_handle, memif_intr_handler,
cc);
+ /* fd is closed below, clear reference here. */
+ rte_intr_fd_set(cc->intr_handle, -1);
rte_intr_instance_free(cc->intr_handle);
rte_free(cc);
}
@@ -1060,6 +1062,8 @@ memif_socket_create(char *key, uint8_t listener, bool is_abstract, uid_t owner_u
error:
MIF_LOG(ERR, "Failed to setup socket %s: %s", key, strerror(errno));
if (sock != NULL) {
+ /* fd is closed below, clear reference here. */
+ rte_intr_fd_set(sock->intr_handle, -1);
rte_intr_instance_free(sock->intr_handle);
rte_free(sock);
}
@@ -1118,8 +1122,7 @@ memif_socket_init(struct rte_eth_dev *dev, const char *socket_filename)
if (socket->listener) {
rte_intr_callback_unregister(socket->intr_handle,
memif_listener_handler, socket);
- close(rte_intr_fd_get(socket->intr_handle));
- rte_intr_fd_set(socket->intr_handle, -1);
+ rte_intr_fd_close(socket->intr_handle);
rte_intr_instance_free(socket->intr_handle);
}
rte_free(socket);
@@ -1191,8 +1194,7 @@ memif_socket_remove_device(struct rte_eth_dev *dev)
if (pmd->role != MEMIF_ROLE_CLIENT) {
rte_intr_callback_unregister(socket->intr_handle, memif_listener_handler,
socket);
- close(rte_intr_fd_get(socket->intr_handle));
- rte_intr_fd_set(socket->intr_handle, -1);
+ rte_intr_fd_close(socket->intr_handle);
rte_intr_instance_free(socket->intr_handle);
}
rte_free(socket);
@@ -1290,6 +1292,8 @@ memif_connect_client(struct rte_eth_dev *dev)
sockfd = -1;
}
if (pmd->cc != NULL) {
+ /* fd is closed above, clear reference here. */
+ rte_intr_fd_set(pmd->cc->intr_handle, -1);
rte_intr_instance_free(pmd->cc->intr_handle);
rte_free(pmd->cc);
pmd->cc = NULL;
--
2.54.0
More information about the dev
mailing list