diff options
author | Wolfgang Hommel <wolfcw@users.noreply.github.com> | 2022-06-20 19:41:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-20 19:41:24 +0200 |
commit | be4e373e634ee58805b383558c1a56fb8088d0ec (patch) | |
tree | a00739b998a53ae3d7a04fb0edeb16181d40b692 /src | |
parent | b61fade280d6124597a35c9f27a5c9ca1276d24c (diff) | |
parent | 431f09eb196cacb72e4884a04b1c9b10ffff9ac8 (diff) | |
download | libfaketime-be4e373e634ee58805b383558c1a56fb8088d0ec.tar.gz |
Merge pull request #400 from sveyret/shared-mem-sync
Reset shared memory when start time is reset
Diffstat (limited to 'src')
-rw-r--r-- | src/libfaketime.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/libfaketime.c b/src/libfaketime.c index d62a9f1..9d3bc06 100644 --- a/src/libfaketime.c +++ b/src/libfaketime.c @@ -710,6 +710,25 @@ static void next_time(struct timespec *tp, struct timespec *ticklen) } } +static void reset_time() +{ + system_time_from_system(&ftpl_starttime); + if (shared_sem != NULL) + { + if (sem_wait(shared_sem) == -1) + { + perror("libfaketime: In reset_time(), sem_wait failed"); + exit(1); + } + ft_shared->start_time = ftpl_starttime; + if (sem_post(shared_sem) == -1) + { + perror("libfaketime: In reset_time(), sem_post failed"); + exit(1); + } + } +} + /* * ======================================================================= @@ -2533,7 +2552,7 @@ static void parse_ft_string(const char *user_faked_time) /* Reset starttime */ if (NULL == getenv("FAKETIME_DONT_RESET")) - system_time_from_system(&ftpl_starttime); + reset_time(); goto parse_modifiers; break; @@ -2561,7 +2580,7 @@ static void parse_ft_string(const char *user_faked_time) } } if (NULL == getenv("FAKETIME_DONT_RESET")) - system_time_from_system(&ftpl_starttime); + reset_time(); goto parse_modifiers; break; |