From df94b6412e0628cd577da0ce5626358a3967ee44 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 19 May 2007 07:08:23 +0000 Subject: * elf/dl-close.c (_dl_close_worker): When removing object from global scope, wait for all lookups to finish afterwards. * elf/dl-open.c (add_to_global): When global scope array must grow, allocate a new one and free old array only after all lookups finish. * elf/dl-runtime.c (_dl_fixup): Protect using global scope. (_dl_lookup_symbol_x): Likewise. * elf/dl-support.c: Define _dl_wait_lookup_done. * sysdeps/generic/ldsodefs.h (struct rtld_global): Add _dl_wait_lookup_done. --- elf/dl-close.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'elf/dl-close.c') diff --git a/elf/dl-close.c b/elf/dl-close.c index e0fe26ad02..8e5c9fc033 100644 --- a/elf/dl-close.c +++ b/elf/dl-close.c @@ -31,6 +31,7 @@ #include #include #include +#include /* Type of the constructor functions. */ @@ -487,6 +488,9 @@ _dl_close_worker (struct link_map *map) ns_msl->r_list[cnt - 1] = ns_msl->r_list[cnt]; --ns_msl->r_nlist; + + if (!RTLD_SINGLE_THREAD_P) + THREAD_GSCOPE_WAIT (); } /* Remove the object from the dtv slotinfo array if it uses TLS. */ -- cgit 1.4.1