about summary refs log tree commit diff
path: root/elf
diff options
context:
space:
mode:
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-close.c8
-rw-r--r--elf/dl-open.c4
2 files changed, 7 insertions, 5 deletions
diff --git a/elf/dl-close.c b/elf/dl-close.c
index e1ca142a69..8e613eb3eb 100644
--- a/elf/dl-close.c
+++ b/elf/dl-close.c
@@ -38,6 +38,7 @@ internal_function
 _dl_close (struct link_map *map)
 {
   struct link_map **list;
+  unsigned nsearchlist;
   unsigned int i;
 
   if (map->l_opencount == 0)
@@ -56,9 +57,10 @@ _dl_close (struct link_map *map)
     }
 
   list = map->l_searchlist;
+  nsearchlist = map->l_nsearchlist;
 
   /* Call all termination functions at once.  */
-  for (i = 0; i < map->l_nsearchlist; ++i)
+  for (i = 0; i < nsearchlist; ++i)
     {
       struct link_map *imap = list[i];
       if (imap->l_opencount == 1 && imap->l_type == lt_loaded
@@ -83,12 +85,12 @@ _dl_close (struct link_map *map)
   /* The search list contains a counted reference to each object it
      points to, the 0th elt being MAP itself.  Decrement the reference
      counts on all the objects MAP depends on.  */
-  for (i = 0; i < map->l_nsearchlist; ++i)
+  for (i = 0; i < nsearchlist; ++i)
     --list[i]->l_opencount;
 
   /* Check each element of the search list to see if all references to
      it are gone.  */
-  for (i = 0; i < map->l_nsearchlist; ++i)
+  for (i = 0; i < nsearchlist; ++i)
     {
       struct link_map *imap = list[i];
       if (imap->l_opencount == 0 && imap->l_type == lt_loaded)
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 3670657379..fa36fcb32e 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -169,8 +169,8 @@ dl_open_worker (void *a)
 	}
       else
 	{
-	  if (_dl_global_scope_end + 2
-	      == _dl_global_scope + _dl_global_scope_alloc)
+	  if (_dl_global_scope_end + 3
+	      > _dl_global_scope + _dl_global_scope_alloc)
 	    {
 	      /* Must extend the list.  */
 	      struct link_map **new = realloc (_dl_global_scope,