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 <[email protected]>
---
 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

Reply via email to