diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-04-16 09:32:54 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-04-16 09:32:54 +0200 |
| commit | 9880a488ac919316f07a8ce5e8da546fb9029cf6 (patch) | |
| tree | 4f08812f2f68d56c62ccdaf954a8c21a60b24876 /src/librarian | |
| parent | f59675e9bf438cfca082c5d35bc07ca19762195b (diff) | |
| download | box64-9880a488ac919316f07a8ce5e8da546fb9029cf6.tar.gz box64-9880a488ac919316f07a8ce5e8da546fb9029cf6.zip | |
Another fix for dlopen/dlclose sequence (should be ok now, at last)
Diffstat (limited to 'src/librarian')
| -rwxr-xr-x | src/librarian/library.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/librarian/library.c b/src/librarian/library.c index 085d954d..9f852408 100755 --- a/src/librarian/library.c +++ b/src/librarian/library.c @@ -1079,8 +1079,9 @@ void IncRefCount(library_t* lib, x64emu_t* emu) case LIB_WRAPPED: ++lib->w.refcnt; if(lib->w.needed) - for(int i=0; i<lib->w.needed->size; ++i) + for(int i=0; i<lib->w.needed->size; ++i) { IncRefCount(lib->w.needed->libs[i], emu); + } break; case LIB_EMULATED: ++lib->e.elf->refcnt; @@ -1102,7 +1103,8 @@ int DecRefCount(library_t** lib, x64emu_t* emu) switch ((*lib)->type) { case LIB_WRAPPED: needed = (*lib)->w.needed; - if(!(ret=--(*lib)->w.refcnt)) { + ret=--(*lib)->w.refcnt; + if(!ret) { needed = copy_neededlib(needed); freed=1; Free1Library(lib, emu); @@ -1110,7 +1112,8 @@ int DecRefCount(library_t** lib, x64emu_t* emu) break; case LIB_EMULATED: needed = (*lib)->e.elf->needed; - if(!(ret=--(*lib)->e.elf->refcnt)) { + ret=--(*lib)->e.elf->refcnt; + if(!ret) { needed = copy_neededlib(needed); freed=1; removeLinkMapLib(*lib); |