There is no good way to shut down this thread from an application signal handler. Here we add an rte_eal_intr_exit() function to allow this.
Signed-off-by: Matthew Hall <mhall at mhcomputing.net> --- lib/librte_eal/common/include/rte_eal.h | 9 +++++++++ lib/librte_eal/linuxapp/eal/eal_interrupts.c | 11 +++++++++++ 2 files changed, 20 insertions(+) diff --git a/lib/librte_eal/common/include/rte_eal.h b/lib/librte_eal/common/include/rte_eal.h index d2816a8..1533eeb 100644 --- a/lib/librte_eal/common/include/rte_eal.h +++ b/lib/librte_eal/common/include/rte_eal.h @@ -165,6 +165,15 @@ int rte_eal_init(int argc, char **argv); typedef void (*rte_usage_hook_t)(const char * prgname); /** + * Shut down the EAL interrupt thread. + * + * This function can be called from a signal handler during application + * shutdown. + * + */ +int rte_eal_intr_exit(void); + +/** * Add application usage routine callout from the eal_usage() routine. * * This function allows the application to include its usage message diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c index b33ccdb..aa332a1 100644 --- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c +++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c @@ -892,6 +892,17 @@ rte_eal_intr_init(void) if (ret_1 != 0) RTE_LOG(ERR, EAL, "Failed to set thread name for interrupt handling\n"); + +int +rte_eal_intr_exit(void) +{ + int ret = 0; + + ret = pthread_cancel(intr_thread); + if (ret != 0) { + RTE_LOG(ERR, EAL, + "Failed to cancel thread for interrupt handling\n"); + return -ret; } return -ret; -- 2.5.0