Skip to content

Commit 949b36e

Browse files
authored
Merge pull request #519 from bjornfor/fix-semaphore-deletion
Only let the owner clean up semaphore and shared memory
2 parents 7bfe656 + 0c76f27 commit 949b36e

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/libfaketime.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -697,10 +697,21 @@ static void ft_shm_destroy(void)
697697
*/
698698
if (0 == ft_sem_open(sem_name, &ft_sem))
699699
{
700-
ft_sem_unlink(&ft_sem);
700+
// Only delete the semaphore (and shared memory) if we're the owner.
701+
pid_t sem_owner_pid;
702+
int num_matched = sscanf(sem_name, "/faketime_sem_%d", &sem_owner_pid);
703+
if (num_matched != 1)
704+
{
705+
fprintf(stderr, "libfaketime: failed to parse semaphore owner pid from sem_name %s\n", sem_name);
706+
exit(1);
707+
}
708+
if (getpid() == sem_owner_pid)
709+
{
710+
ft_sem_unlink(&ft_sem);
711+
shm_unlink(shm_name);
712+
unsetenv("FAKETIME_SHARED");
713+
}
701714
}
702-
shm_unlink(shm_name);
703-
unsetenv("FAKETIME_SHARED");
704715
}
705716
}
706717

0 commit comments

Comments
 (0)