[v2,2/3] examples/multi_process: cleanup bus objects while terminating app
Checks
Commit Message
From: Rohit Raj <rohit.raj@nxp.com>
Certain bus objects may need to be closed and re-acquired
while terminating and rerunning the client application.
Hence a signal handler is required to catch the termination
of the App and hence closing the bus objects.
This patch adds the missing signal handler in the client
app and closes the Bus objects in both client and server
applications when the signal Handler is called.
Signed-off-by: Rohit Raj <rohit.raj@nxp.com>
---
.../multi_process/client_server_mp/mp_client/client.c | 11 +++++++++++
.../multi_process/client_server_mp/mp_server/main.c | 4 +++-
2 files changed, 14 insertions(+), 1 deletion(-)
Comments
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
@@ -11,6 +11,7 @@
#include <stdlib.h>
#include <getopt.h>
#include <string.h>
+#include <signal.h>
#include <rte_common.h>
#include <rte_malloc.h>
@@ -196,6 +197,14 @@ handle_packet(struct rte_mbuf *buf)
}
+static void
+signal_handler(int signal)
+{
+ if (signal == SIGINT)
+ rte_eal_cleanup();
+ exit(0);
+}
+
/*
* Application main function - loops through
* receiving and processing packets. Never returns
@@ -217,6 +226,8 @@ main(int argc, char *argv[])
argc -= retval;
argv += retval;
+ signal(SIGINT, signal_handler);
+
if (parse_app_args(argc, argv) < 0)
rte_exit(EXIT_FAILURE, "Invalid command-line arguments\n");
@@ -275,11 +275,13 @@ signal_handler(int signal)
{
uint16_t port_id;
- if (signal == SIGINT)
+ if (signal == SIGINT) {
RTE_ETH_FOREACH_DEV(port_id) {
rte_eth_dev_stop(port_id);
rte_eth_dev_close(port_id);
}
+ rte_eal_cleanup();
+ }
exit(0);
}