summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWolfgang Hommel <wolfgang.hommel@unibw.de>2019-08-13 19:48:29 +0200
committerWolfgang Hommel <wolfgang.hommel@unibw.de>2019-08-13 19:48:29 +0200
commita70db9196a25f084da3c814bd687f12a57a4ef5d (patch)
treea9896b286391d05f159e06a2caac43908c5df596 /src
parent7498c405ed80cc001776cd98906b3bd97f097705 (diff)
downloadlibfaketime-a70db9196a25f084da3c814bd687f12a57a4ef5d.tar.gz
Shared memory cleanup when it was created locally
Diffstat (limited to 'src')
-rw-r--r--src/libfaketime.c21
1 files changed, 21 insertions, 0 deletions
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();
}