* elf/dl-load.c (_dl_map_object_from_fd): Move state change
authorUlrich Drepper <drepper@redhat.com>
Sun, 30 Apr 2006 23:47:30 +0000 (23:47 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 30 Apr 2006 23:47:30 +0000 (23:47 +0000)
notification...
(lose): ...to here.

ChangeLog
elf/dl-load.c

index 3760dc7..2e4ae27 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2006-04-30  Ulrich Drepper  <drepper@redhat.com>
 
+       * elf/dl-load.c (_dl_map_object_from_fd): Move state change
+       notification...
+       (lose): ...to here.
+
        * posix/Makefile (tests): Add tst-getaddrinfo3.
        * posix/tst-getaddrinfo3.c: New file.
 
index 088954a..29fdfd8 100644 (file)
@@ -1,6 +1,5 @@
 /* Map in a shared object's segments from the file.
-   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006  Free Software Foundation, Inc.
+   Copyright (C) 1995-2005, 2006  Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -786,7 +785,7 @@ _dl_init_paths (const char *llp)
 static void
 __attribute__ ((noreturn, noinline))
 lose (int code, int fd, const char *name, char *realname, struct link_map *l,
-      const char *msg)
+      const char *msg, struct r_debug *r)
 {
   /* The file might already be closed.  */
   if (fd != -1)
@@ -805,6 +804,13 @@ lose (int code, int fd, const char *name, char *realname, struct link_map *l,
       free (l);
     }
   free (realname);
+
+  if (r != NULL)
+    {
+      r->r_state = RT_CONSISTENT;
+      _dl_debug_state ();
+    }
+
   _dl_signal_error (code, name, NULL, msg);
 }
 
@@ -840,13 +846,8 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
     call_lose_errno:
       errval = errno;
     call_lose:
-      if (make_consistent)
-       {
-         r->r_state = RT_CONSISTENT;
-         _dl_debug_state ();
-       }
-
-      lose (errval, fd, name, realname, l, errstring);
+      lose (errval, fd, name, realname, l, errstring,
+           make_consistent ? r : NULL);
     }
 
   /* Look again to see if the real name matched another already loaded.  */
@@ -1642,7 +1643,7 @@ open_verify (const char *name, struct filebuf *fbp, struct link_map *loader,
              name = strdupa (realname);
              free (realname);
            }
-         lose (errval, fd, name, NULL, NULL, errstring);
+         lose (errval, fd, name, NULL, NULL, errstring, NULL);
        }
 
       /* See whether the ELF header is what we expect.  */