summaryrefslogtreecommitdiff
path: root/app/test-eventdev/evt_main.c
diff options
context:
space:
mode:
authorJerin Jacob <jerin.jacob@caviumnetworks.com>2017-07-04 10:23:06 +0530
committerJerin Jacob <jerin.jacob@caviumnetworks.com>2017-07-07 09:32:37 +0200
commit2b0bf13c0b9803e265e3af00fb3ee40cdd761284 (patch)
tree4fc083a198b3f40aaa109820c5d0ec2feecdf795 /app/test-eventdev/evt_main.c
parent3f3872b1b954df10afbdd3afd19de53512a2da73 (diff)
downloaddpdk-next-eventdev-2b0bf13c0b9803e265e3af00fb3ee40cdd761284.zip
dpdk-next-eventdev-2b0bf13c0b9803e265e3af00fb3ee40cdd761284.tar.gz
dpdk-next-eventdev-2b0bf13c0b9803e265e3af00fb3ee40cdd761284.tar.xz
app/testeventdev: add signal handler
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
Diffstat (limited to 'app/test-eventdev/evt_main.c')
-rw-r--r--app/test-eventdev/evt_main.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c
index 27d0ae6..56cd137 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");