From 1fb59076ef730f5e2d05bdf1c7ac3e6fa5382215 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 10 Jul 2020 19:06:16 +0200 Subject: [PATCH] real fix for filesys double-free crash --- src/filesys.cpp | 6 +----- src/threaddep/thread.h | 11 +++++++++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/filesys.cpp b/src/filesys.cpp index 694d9882..c0c9b5e8 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -8647,11 +8647,7 @@ void filesys_cleanup(void) filesys_free_handles(); free_mountinfo(); destroy_comm_pipe(&shellexecute_pipe); - if (singlethread_int_sem != nullptr) - { - uae_sem_destroy(&singlethread_int_sem); - singlethread_int_sem == nullptr; - } + uae_sem_destroy(&singlethread_int_sem); shell_execute_data = 0; } diff --git a/src/threaddep/thread.h b/src/threaddep/thread.h index c6ad0fc7..ac142613 100644 --- a/src/threaddep/thread.h +++ b/src/threaddep/thread.h @@ -17,10 +17,17 @@ typedef SDL_sem* uae_sem_t; STATIC_INLINE int uae_sem_init(uae_sem_t* sem, int dummy, int init) { *sem = SDL_CreateSemaphore(init); - return (*sem == nullptr); + return *sem == nullptr; } -#define uae_sem_destroy(PSEM) SDL_DestroySemaphore (*PSEM) +STATIC_INLINE void uae_sem_destroy(uae_sem_t* event) +{ + if (*event) + { + SDL_DestroySemaphore(*event); + *event = nullptr; + } +} #define uae_sem_post(PSEM) SDL_SemPost (*PSEM) #define uae_sem_wait(PSEM) SDL_SemWait (*PSEM) #define uae_sem_trywait(PSEM) SDL_SemTryWait (*PSEM)