[dpdk-dev] [PATCH v2 11/34] app/testeventdev: add the signal handler
Jerin Jacob
jerin.jacob at caviumnetworks.com
Mon Jul 3 21:13:39 CEST 2017
Signed-off-by: Jerin Jacob <jerin.jacob at caviumnetworks.com>
Acked-by: Harry van Haaren <harry.van.haaren at intel.com>
---
app/test-eventdev/evt_main.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c
index 27d0ae683..56cd137ce 100644
--- a/app/test-eventdev/evt_main.c
+++ b/app/test-eventdev/evt_main.c
@@ -34,6 +34,7 @@
#include <unistd.h>
#include <signal.h>
+#include <rte_atomic.h>
#include <rte_debug.h>
#include <rte_eal.h>
#include <rte_eventdev.h>
@@ -44,6 +45,35 @@
struct evt_options opt;
struct evt_test *test;
+static void
+signal_handler(int signum)
+{
+ if (signum == SIGINT || signum == SIGTERM) {
+ printf("\nSignal %d received, preparing to exit...\n",
+ signum);
+ /* request all lcores to exit from the main loop */
+ *(int *)test->test_priv = true;
+ rte_wmb();
+
+ rte_eal_mp_wait_lcore();
+
+ if (test->ops.eventdev_destroy)
+ test->ops.eventdev_destroy(test, &opt);
+
+ if (test->ops.ethdev_destroy)
+ test->ops.ethdev_destroy(test, &opt);
+
+ if (test->ops.mempool_destroy)
+ test->ops.mempool_destroy(test, &opt);
+
+ if (test->ops.test_destroy)
+ test->ops.test_destroy(test, &opt);
+
+ /* exit with the expected status */
+ signal(signum, SIG_DFL);
+ kill(getpid(), signum);
+ }
+}
static inline void
evt_options_dump_all(struct evt_test *test, struct evt_options *opts)
@@ -59,6 +89,9 @@ main(int argc, char **argv)
uint8_t evdevs;
int ret;
+ signal(SIGINT, signal_handler);
+ signal(SIGTERM, signal_handler);
+
ret = rte_eal_init(argc, argv);
if (ret < 0)
rte_panic("invalid EAL arguments\n");
--
2.13.2
More information about the dev
mailing list