diff options
Diffstat (limited to 'ldso/libdl/libdl.c')
-rw-r--r-- | ldso/libdl/libdl.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c index c54104ffe..ebd7b85b8 100644 --- a/ldso/libdl/libdl.c +++ b/ldso/libdl/libdl.c @@ -186,13 +186,6 @@ void *_dlopen(const char *libname, int flag) _dl_unmap_cache(); return NULL; } - if (tpnt->init_flag & INIT_FUNCS_CALLED) { - - /* If the init and fini stuff has already been run, that means - * someone called dlopen on a library we already have opened, so - * we don't need to fix thing up any further... */ - return tpnt; - } dyn_chain = (struct dyn_elf *) malloc(sizeof(struct dyn_elf)); _dl_memset(dyn_chain, 0, sizeof(struct dyn_elf)); @@ -204,6 +197,13 @@ void *_dlopen(const char *libname, int flag) dyn_chain->next_handle = _dl_handles; _dl_handles = rpnt = dyn_chain; + if (tpnt->init_flag & INIT_FUNCS_CALLED) { + /* If the init and fini stuff has already been run, that means + * the dlopen'd library has already been loaded, and nothing + * further needs to be done. */ + return (void *) dyn_chain; + } + #ifdef __SUPPORT_LD_DEBUG__ if(_dl_debug) |