[RFC 2/6] eventdev: avoid use of pthread_cancel
Stephen Hemminger
stephen at networkplumber.org
Wed Sep 24 18:51:09 CEST 2025
To control the rx event thread is simpler and safer to
just close the file descriptor rather than using pthread_cancel().
Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
lib/eventdev/rte_event_eth_rx_adapter.c | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c
index 994f256322..95ceb35c5a 100644
--- a/lib/eventdev/rte_event_eth_rx_adapter.c
+++ b/lib/eventdev/rte_event_eth_rx_adapter.c
@@ -1173,9 +1173,11 @@ rxa_intr_thread(void *arg)
while (1) {
n = rte_epoll_wait(rx_adapter->epd, epoll_events,
RTE_EVENT_ETH_INTR_RING_SIZE, -1);
- if (unlikely(n < 0))
- RTE_EDEV_LOG_ERR("rte_epoll_wait returned error %d",
- n);
+ if (unlikely(n < 0)) {
+ RTE_EDEV_LOG_ERR("rte_epoll_wait returned error %d", n);
+ break;
+ }
+
for (i = 0; i < n; i++) {
rxa_intr_ring_enqueue(rx_adapter,
epoll_events[i].epdata.data);
@@ -1643,10 +1645,12 @@ rxa_destroy_intr_thread(struct event_eth_rx_adapter *rx_adapter)
{
int err;
- err = pthread_cancel((pthread_t)rx_adapter->rx_intr_thread.opaque_id);
- if (err)
- RTE_EDEV_LOG_ERR("Can't cancel interrupt thread err = %d",
- err);
+ /*
+ * close the epoll fd used in the interrupt thread
+ * this will unblock the rte_epoll_wait().
+ */
+ close(rx_adapter->epd);
+ rx_adapter->epd = INIT_FD;
err = rte_thread_join(rx_adapter->rx_intr_thread, NULL);
if (err)
@@ -1671,9 +1675,6 @@ rxa_free_intr_resources(struct event_eth_rx_adapter *rx_adapter)
if (ret)
return ret;
- close(rx_adapter->epd);
- rx_adapter->epd = INIT_FD;
-
return ret;
}
--
2.47.3
More information about the dev
mailing list