diff --git a/arch/sim/src/sim/posix/sim_hostmemory.c b/arch/sim/src/sim/posix/sim_hostmemory.c index cc651cb46e8..c4c02191871 100644 --- a/arch/sim/src/sim/posix/sim_hostmemory.c +++ b/arch/sim/src/sim/posix/sim_hostmemory.c @@ -119,7 +119,7 @@ void *host_allocshmem(const char *name, size_t size, int master) { /* Avoid the second slave instance open successfully */ - host_uninterruptible(shm_unlink, name); + host_unlinkshmem(name); } ret = host_uninterruptible(ftruncate, fd, size); @@ -145,6 +145,11 @@ void host_freeshmem(void *mem) host_uninterruptible(munmap, mem, 0); } +int host_unlinkshmem(const char *name) +{ + return host_uninterruptible(shm_unlink, name); +} + size_t host_mallocsize(void *mem) { #ifdef __APPLE__ diff --git a/arch/sim/src/sim/sim_internal.h b/arch/sim/src/sim/sim_internal.h index f73bedf23d4..057c337eec8 100644 --- a/arch/sim/src/sim/sim_internal.h +++ b/arch/sim/src/sim/sim_internal.h @@ -222,6 +222,7 @@ void *host_memalign(size_t alignment, size_t size); void host_free(void *mem); void *host_realloc(void *oldmem, size_t size); void host_mallinfo(int *aordblks, int *uordblks); +int host_unlinkshmem(const char *name); /* sim_hosttime.c ***********************************************************/ diff --git a/arch/sim/src/sim/sim_rptun.c b/arch/sim/src/sim/sim_rptun.c index 3613f19f903..7416222da64 100644 --- a/arch/sim/src/sim/sim_rptun.c +++ b/arch/sim/src/sim/sim_rptun.c @@ -201,11 +201,14 @@ static int sim_rptun_stop(struct rptun_dev_s *dev) if ((priv->master & SIM_RPTUN_BOOT) && (priv->pid > 0)) { priv->shmem->cmdm = SIM_RPTUN_STOP << SIM_RPTUN_SHIFT; - host_waitpid(priv->pid); + } + if (priv->shmem) + { host_freeshmem(priv->shmem); priv->shmem = NULL; + host_unlinkshmem(priv->shmemname); } return 0;