X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=blobdiff_plain;f=src%2Fldso%2Fdynlink.c;h=62dd9db78a5306089c6a09880b14ec58feeca41c;hp=a23390e120dbd4a47241db33e1549a89760962bb;hb=06933cc72445e12ee46b2930659eb5db0f9d6a43;hpb=0e4dae3d77f67bed0cd29c98b67b86c7d9853ac9 diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index a23390e1..62dd9db7 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -509,7 +509,7 @@ void *dlopen(const char *file, int mode) } p = load_library(file); - if (!p) return 0; + if (!p) goto end; /* First load handling */ if (!p->deps) { @@ -531,8 +531,8 @@ void *dlopen(const char *file, int mode) p->global = 1; } +end: pthread_rwlock_unlock(&lock); - return p; } @@ -541,7 +541,8 @@ static void *do_dlsym(struct dso *p, const char *s) size_t i; uint32_t h; Sym *sym; - if (p == head) return find_sym(head, s, 0); + if (p == head || p == RTLD_DEFAULT) + return find_sym(head, s, 0); h = hash(s); sym = lookup(s, h, p->syms, p->hashtab, p->strings); if (sym && sym->st_value && (1<<(sym->st_info&0xf) & OK_TYPES))