mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
* sysdeps/generic/ldsodefs.h (struct dl_scope_free_list): Store
void * pointers instead of struct link_map **. (_dl_scope_free): Change argument type to void *. * include/link.h (struct link_map): Change type of l_reldeps to struct link_map_reldeps, move l_reldepsact into that struct too. * elf/dl-deps.c: Include atomic.h. (_dl_map_object_deps): Only change l->l_initfini when it is fully populated, use _dl_scope_free for freeing it. Optimize removal of libs from reldeps by using l_reserved flag, when some removal is needed, allocate a new list instead of reallocating and free the old with _dl_scope_free. Adjust for l_reldeps and l_reldepsact changes. * elf/dl-lookup.c (add_dependency): Likewise. Reorganize to allow searching in l_initfini and l_reldeps without holding dl_load_lock. * elf/dl-fini.c (_dl_sort_fini): Adjust for l_reldeps and l_reldepsact changes. * elf/dl-close.c (_dl_close_worker): Likewise. * elf/dl-open.c (_dl_scope_free): Change argument type to void *.
This commit is contained in:
@ -203,9 +203,9 @@ _dl_close_worker (struct link_map *map)
|
||||
}
|
||||
/* And the same for relocation dependencies. */
|
||||
if (l->l_reldeps != NULL)
|
||||
for (unsigned int j = 0; j < l->l_reldepsact; ++j)
|
||||
for (unsigned int j = 0; j < l->l_reldeps->act; ++j)
|
||||
{
|
||||
struct link_map *jmap = l->l_reldeps[j];
|
||||
struct link_map *jmap = l->l_reldeps->list[j];
|
||||
|
||||
if (jmap->l_idx != IDX_STILL_USED)
|
||||
{
|
||||
@ -497,7 +497,7 @@ _dl_close_worker (struct link_map *map)
|
||||
THREAD_GSCOPE_WAIT ();
|
||||
|
||||
/* Now we can free any queued old scopes. */
|
||||
struct dl_scope_free_list *fsl = GL(dl_scope_free_list);
|
||||
struct dl_scope_free_list *fsl = GL(dl_scope_free_list);
|
||||
if (fsl != NULL)
|
||||
while (fsl->count > 0)
|
||||
free (fsl->list[--fsl->count]);
|
||||
|
Reference in New Issue
Block a user