From af5e24ef06087174a7ee5c6d3434e7111ed12589 Mon Sep 17 00:00:00 2001 From: Francisco Javier Trujillo Mata Date: Thu, 25 Nov 2021 11:10:47 +0100 Subject: [PATCH] Deinit mutexs --- src/libcglue/Makefile.am | 2 +- src/libcglue/mutexman.c | 10 ++++++++++ src/libcglue/terminate.c | 3 +++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/libcglue/Makefile.am b/src/libcglue/Makefile.am index 65366263..a4816424 100644 --- a/src/libcglue/Makefile.am +++ b/src/libcglue/Makefile.am @@ -32,7 +32,7 @@ GLUE_OBJS = __fill_stat.o __psp_heap_blockid.o __psp_free_heap.o _fork.o _wait.o INIT_OBJS = __libcglue_init.o -MUTEXMAN_OBJS = __malloc_mutex.o __sbrk_mutex.o __fdman_mutex.o __init_mutex.o +MUTEXMAN_OBJS = __malloc_mutex.o __sbrk_mutex.o __fdman_mutex.o __init_mutex.o __deinit_mutex.o NETDB_OBJS = h_errno.o gethostbyaddr.o gethostbyname.o diff --git a/src/libcglue/mutexman.c b/src/libcglue/mutexman.c index 995ef5d4..e5628369 100644 --- a/src/libcglue/mutexman.c +++ b/src/libcglue/mutexman.c @@ -42,4 +42,14 @@ void __init_mutex() sceKernelCreateLwMutex(&__sbrk_mutex, "sbrk mutex", 0, 0, 0); sceKernelCreateLwMutex(&__fdman_mutex, "fdman mutex", 0, 0, 0); } +#endif + +#ifdef F___deinit_mutex +/* Create mutex used for making thread safe mallock and get fd */ +void __deinit_mutex() +{ + sceKernelDeleteLwMutex(&__malloc_mutex); + sceKernelDeleteLwMutex(&__sbrk_mutex); + sceKernelDeleteLwMutex(&__fdman_mutex); +} #endif \ No newline at end of file diff --git a/src/libcglue/terminate.c b/src/libcglue/terminate.c index a3eb0b25..1e6f9082 100644 --- a/src/libcglue/terminate.c +++ b/src/libcglue/terminate.c @@ -18,18 +18,21 @@ extern int sce_newlib_nocreate_thread_in_start __attribute__((weak)); int __psp_free_heap(void); +void __deinit_mutex(void); void _exit(int status) { if (&sce_newlib_nocreate_thread_in_start != NULL) { /* Free the heap created by _sbrk(). */ __psp_free_heap(); + __deinit_mutex(); sceKernelSelfStopUnloadModule(1, 0, NULL); } else { if (status == 0) { /* Free the heap created by _sbrk(). */ __psp_free_heap(); + __deinit_mutex(); } sceKernelExitThread(status);