* elf/dl-lookup.c (add_dependency): Handle failing memory cvs/fedora-glibc-20070920T0007
authorUlrich Drepper <drepper@redhat.com>
Wed, 19 Sep 2007 22:22:51 +0000 (22:22 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 19 Sep 2007 22:22:51 +0000 (22:22 +0000)
allocation for dependency list.  Remove unnecessary check.

ChangeLog
elf/dl-lookup.c

index f4de759..3845390 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2007-09-19  Ulrich Drepper  <drepper@redhat.com>
 
+       * elf/dl-lookup.c (add_dependency): Handle failing memory
+       allocation for dependency list.  Remove unnecessary check.
+
        * sysdeps/posix/getaddrinfo.c (getaddrinfo): Avoid unnecessary
        open/close when determining source addresses.
 
index ce28f86..c529007 100644 (file)
@@ -162,8 +162,8 @@ add_dependency (struct link_map *undef_map, struct link_map *map, int flags)
        goto out_check;
 
       /* Avoid references to objects which cannot be unloaded anyway.  */
-      if (map->l_type != lt_loaded
-         || (map->l_flags_1 & DF_1_NODELETE) != 0)
+      assert (map->l_type == lt_loaded);
+      if ((map->l_flags_1 & DF_1_NODELETE) != 0)
        goto out;
 
       /* If the object with the undefined reference cannot be removed ever
@@ -197,13 +197,13 @@ add_dependency (struct link_map *undef_map, struct link_map *map, int flags)
        }
 
       /* If we didn't manage to allocate memory for the list this is
-        no fatal mistake.  We simply increment the use counter of the
-        referenced object and don't record the dependencies.  This
-        means this increment can never be reverted and the object
-        will never be unloaded.  This is semantically the correct
+        no fatal mistake.  We simply make sure the referenced object
+        cannot be unloaded.  This is semantically the correct
         behavior.  */
       if (__builtin_expect (act < undef_map->l_reldepsmax, 1))
        undef_map->l_reldeps[undef_map->l_reldepsact++] = map;
+      else
+       map->l_flags_1 |= DF_1_NODELETE;
 
       /* Display information if we are debugging.  */
       if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))