diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-25 11:36:14 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-25 11:36:14 +0100 |
| commit | 72ca99051b9ea5786e22214d2cbb0befd70be670 (patch) | |
| tree | 03ff3001d6097a6aa0a7d1cfc4c19ed037fc41c6 /src/librarian/library.c | |
| parent | 905e3ae583da508c24dbb80628fb08084e62ae80 (diff) | |
| download | box64-72ca99051b9ea5786e22214d2cbb0befd70be670.tar.gz box64-72ca99051b9ea5786e22214d2cbb0befd70be670.zip | |
Improved shutdown sequence
Diffstat (limited to 'src/librarian/library.c')
| -rwxr-xr-x | src/librarian/library.c | 19 |
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; } |