From 6c08fae048eb2808ae4db92ee6aaf937eb1d684a Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Wed, 8 Jul 2020 12:38:10 -0700 Subject: [PATCH] SHMEM: Fix Linux code to properly use built-in's and cleanup on shutdown As reported in #909 --- sim_fio.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sim_fio.c b/sim_fio.c index eb97b9eb..8df4c06b 100644 --- a/sim_fio.c +++ b/sim_fio.c @@ -569,7 +569,7 @@ struct SHMEM { t_stat sim_shmem_open (const char *name, size_t size, SHMEM **shmem, void **addr) { -#ifdef HAVE_SHM_OPEN +#if defined (HAVE_SHM_OPEN) && defined (__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) *shmem = (SHMEM *)calloc (1, sizeof(**shmem)); mode_t orig_mask; @@ -636,15 +636,17 @@ if (shmem == NULL) return; if (shmem->shm_base != MAP_FAILED) munmap (shmem->shm_base, shmem->shm_size); -if (shmem->shm_fd != -1) +if (shmem->shm_fd != -1) { + shm_unlink (shmem->shm_name); close (shmem->shm_fd); + } free (shmem->shm_name); free (shmem); } int32 sim_shmem_atomic_add (int32 *p, int32 v) { -#if defined (HAVE_GCC_SYNC_BUILTINS) +#if defined (__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) return __sync_add_and_fetch((int *) p, v); #else return *p + v; @@ -653,7 +655,7 @@ return *p + v; t_bool sim_shmem_atomic_cas (int32 *ptr, int32 oldv, int32 newv) { -#if defined (HAVE_GCC_SYNC_BUILTINS) +#if defined (__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) return __sync_bool_compare_and_swap (ptr, oldv, newv); #else if (*ptr == oldv) {