X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=blobdiff_plain;f=src%2Fldso%2Fdynlink.c;h=ac4b669f178bdb94d5d674e1a6fbea196c3b0c19;hp=eac07d9c5425066b559ff902056b17d43c49c5fe;hb=509b50eda8ea7d4a28f738e4cf8ea98d25959f00;hpb=11bc173765a22d460e090f46278ab4b96551a43b diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index eac07d9c..ac4b669f 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -479,7 +479,7 @@ static struct dso *load_library(const char *name) FILE *f = fopen(ETC_LDSO_PATH, "rbe"); if (f) { if (getdelim(&sys_path, (size_t[1]){0}, 0, f) <= 0) { - if (sys_path) free(sys_path); + free(sys_path); sys_path = ""; } fclose(f); @@ -692,6 +692,10 @@ static void do_init_fini(struct dso *p) } if (dyn[0] & (1<base + dyn[DT_INIT]))(); + if (!need_locking && libc.threads_minus_1) { + need_locking = 1; + pthread_mutex_lock(&init_fini_lock); + } } if (need_locking) pthread_mutex_unlock(&init_fini_lock); }