From 3dda84e58b148f92b2bb4d94caacc84011fa3919 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sat, 13 Mar 2021 16:43:15 +0100 Subject: Fixed a few minor leaks --- src/libtools/threads.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'src/libtools/threads.c') diff --git a/src/libtools/threads.c b/src/libtools/threads.c index b3e208fd..3e1a8eaa 100755 --- a/src/libtools/threads.c +++ b/src/libtools/threads.c @@ -152,8 +152,10 @@ typedef struct emuthread_s { static void emuthread_destroy(void* p) { emuthread_t *et = (emuthread_t*)p; - FreeX64Emu(&et->emu); - free(et); + if(et) { + FreeX64Emu(&et->emu); + free(et); + } } static pthread_key_t thread_key; @@ -732,8 +734,10 @@ EXPORT int my_pthread_mutex_unlock(pthread_mutex_t *m) static void emujmpbuf_destroy(void* p) { emu_jmpbuf_t *ej = (emu_jmpbuf_t*)p; - free(ej->jmpbuf); - free(ej); + if(ej) { + free(ej->jmpbuf); + free(ej); + } } static pthread_key_t jmpbuf_key; @@ -778,4 +782,14 @@ void fini_pthread_helper(box64context_t* context) ); kh_destroy(mutex, unaligned_mutex); #endif + emu_jmpbuf_t *ejb = (emu_jmpbuf_t*)pthread_getspecific(jmpbuf_key); + if(ejb) { + emujmpbuf_destroy(ejb); + pthread_setspecific(jmpbuf_key, NULL); + } + emuthread_t *et = (emuthread_t*)pthread_getspecific(thread_key); + if(et) { + emuthread_destroy(et); + pthread_setspecific(thread_key, NULL); + } } -- cgit 1.4.1