From a70db9196a25f084da3c814bd687f12a57a4ef5d Mon Sep 17 00:00:00 2001 From: Wolfgang Hommel Date: Tue, 13 Aug 2019 19:48:29 +0200 Subject: Shared memory cleanup when it was created locally --- src/libfaketime.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src') diff --git a/src/libfaketime.c b/src/libfaketime.c index c69212b..34d4b4a 100644 --- a/src/libfaketime.c +++ b/src/libfaketime.c @@ -276,6 +276,8 @@ static void ftpl_init (void) __attribute__ ((constructor)); * ======================================================================= */ +static bool shmCreator = false; + static void ft_shm_create(void) { char sem_name[256], shm_name[256]; int shm_fdN; @@ -338,6 +340,24 @@ static void ft_shm_create(void) { snprintf(shared_objsN, sizeof(shared_objsN), "%s %s", sem_name, shm_name); setenv("FAKETIME_SHARED", shared_objsN, true); sem_close(semN); + + shmCreator = true; +} + +static void ft_shm_destroy(void) +{ + char sem_name[256], shm_name[256], *ft_shared_env = getenv("FAKETIME_SHARED"); + + if (ft_shared_env != NULL) + { + if (sscanf(ft_shared_env, "%255s %255s", sem_name, shm_name) < 2) + { + printf("Error parsing semaphore name and shared memory id from string: %s", ft_shared_env); + exit(1); + } + sem_unlink(sem_name); + sem_unlink(shm_name); + } } static void ft_shm_init (void) @@ -401,6 +421,7 @@ static void ft_cleanup (void) exit(-1); } #endif + if (shmCreator == true) ft_shm_destroy(); } -- cgit v1.2.1