From 935439234bcd3eb98389011ce8e43c3b74dfd9c5 Mon Sep 17 00:00:00 2001 From: Remy Horton Date: Thu, 27 Apr 2017 13:37:06 +0100 Subject: [PATCH] examples/l2fwd-keepalive: clean up shared mem on exit This patch adds the unlinking/unmapping of shared host memory on termination of l2fwd-keepalive. Previously it was only cleaned on re-running of the example application. Fixes: e64833f2273a ("examples/l2fwd-keepalive: add sample application") Signed-off-by: Remy Horton Tested-by: Roman Korynkevych --- examples/l2fwd-keepalive/main.c | 6 ++++-- examples/l2fwd-keepalive/shm.c | 10 ++++++++++ examples/l2fwd-keepalive/shm.h | 9 +++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/examples/l2fwd-keepalive/main.c b/examples/l2fwd-keepalive/main.c index 5fdbdef2d2..37453483b9 100644 --- a/examples/l2fwd-keepalive/main.c +++ b/examples/l2fwd-keepalive/main.c @@ -567,6 +567,7 @@ main(int argc, char **argv) unsigned lcore_id, rx_lcore_id; unsigned nb_ports_in_mask = 0; struct sigaction signal_handler; + struct rte_keepalive_shm *ka_shm; memset(&signal_handler, 0, sizeof(signal_handler)); terminate_signal_received = 0; @@ -751,9 +752,8 @@ main(int argc, char **argv) rte_timer_subsystem_init(); rte_timer_init(&stats_timer); + ka_shm = NULL; if (check_period > 0) { - struct rte_keepalive_shm *ka_shm; - ka_shm = rte_keepalive_shm_create(); if (ka_shm == NULL) rte_exit(EXIT_FAILURE, @@ -813,5 +813,7 @@ main(int argc, char **argv) return -1; } + if (ka_shm != NULL) + rte_keepalive_shm_cleanup(ka_shm); return 0; } diff --git a/examples/l2fwd-keepalive/shm.c b/examples/l2fwd-keepalive/shm.c index 177aa5b8e6..fbf5bd7955 100644 --- a/examples/l2fwd-keepalive/shm.c +++ b/examples/l2fwd-keepalive/shm.c @@ -129,3 +129,13 @@ void rte_keepalive_relayed_state(struct rte_keepalive_shm *shm, strerror(errno)); } } + +void rte_keepalive_shm_cleanup(struct rte_keepalive_shm *ka_shm) +{ + if (shm_unlink(RTE_KEEPALIVE_SHM_NAME) == -1 && errno != ENOENT) + printf("Warning: Error unlinking %s (%s)\n", + RTE_KEEPALIVE_SHM_NAME, strerror(errno)); + + if (ka_shm && munmap(ka_shm, sizeof(struct rte_keepalive_shm)) != 0) + printf("Warning: munmap() failed\n"); +} diff --git a/examples/l2fwd-keepalive/shm.h b/examples/l2fwd-keepalive/shm.h index 25e1b61d90..66a606000f 100644 --- a/examples/l2fwd-keepalive/shm.h +++ b/examples/l2fwd-keepalive/shm.h @@ -87,3 +87,12 @@ struct rte_keepalive_shm *rte_keepalive_shm_create(void); void rte_keepalive_relayed_state(struct rte_keepalive_shm *shm, const int id_core, const enum rte_keepalive_state core_state, uint64_t last_alive); + +/** Shutdown cleanup of shared host memory keepalive object. + * @param *shm + * Pointer to SHM keepalive structure. May be NULL. + * + * If *shm is NULL, this function will only attempt to remove the + * shared host memory handle and not unmap the underlying memory. + */ +void rte_keepalive_shm_cleanup(struct rte_keepalive_shm *ka_shm); -- 2.20.1