about summary refs log tree commit diff stats
path: root/src/librarian/library.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-25 11:36:14 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-25 11:36:14 +0100
commit72ca99051b9ea5786e22214d2cbb0befd70be670 (patch)
tree03ff3001d6097a6aa0a7d1cfc4c19ed037fc41c6 /src/librarian/library.c
parent905e3ae583da508c24dbb80628fb08084e62ae80 (diff)
downloadbox64-72ca99051b9ea5786e22214d2cbb0befd70be670.tar.gz
box64-72ca99051b9ea5786e22214d2cbb0befd70be670.zip
Improved shutdown sequence
Diffstat (limited to 'src/librarian/library.c')
-rwxr-xr-xsrc/librarian/library.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/librarian/library.c b/src/librarian/library.c
index b0be60b4..bd85b8cf 100755
--- a/src/librarian/library.c
+++ b/src/librarian/library.c
@@ -246,13 +246,13 @@ library_t *NewLibrary(const char* path, box64context_t* context)
     printf_log(LOG_DEBUG, "Simplified name is \"%s\"\n", lib->name);
     if(box64_nopulse) {
         if(strstr(lib->name, "libpulse.so")==lib->name || strstr(lib->name, "libpulse-simple.so")==lib->name) {
-            Free1Library(&lib);
+            Free1Library(&lib, NULL);
             return NULL;
         }
     }
     if(box64_novulkan) {
         if(strstr(lib->name, "libvulkan.so")==lib->name) {
-            Free1Library(&lib);
+            Free1Library(&lib, NULL);
             return NULL;
         }
     }
@@ -270,7 +270,7 @@ library_t *NewLibrary(const char* path, box64context_t* context)
     // nothing loaded, so error...
     if(lib->type==-1)
     {
-        Free1Library(&lib);
+        Free1Library(&lib, NULL);
         return NULL;
     }
 
@@ -375,10 +375,18 @@ void InactiveLibrary(library_t* lib)
     lib->active = 0;
 }
 
-void Free1Library(library_t **lib)
+void Free1Library(library_t **lib, x64emu_t* emu)
 {
     if(!(*lib)) return;
 
+    if((*lib)->type==1 && emu) {
+        elfheader_t *elf_header = (*lib)->context->elfs[(*lib)->priv.n.elf_index];
+        RunElfFini(elf_header, emu);
+    }
+
+    if((*lib)->maplib)
+        FreeLibrarian(&(*lib)->maplib, emu);
+
     if((*lib)->type!=-1 && (*lib)->fini) {
         (*lib)->fini(*lib);
     }
@@ -411,9 +419,6 @@ void Free1Library(library_t **lib)
         kh_destroy(symbol2map, (*lib)->symbol2map);
     free_neededlib(&(*lib)->needed);
 
-    if((*lib)->maplib)
-        FreeLibrarian(&(*lib)->maplib);
-
     free(*lib);
     *lib = NULL;
 }