aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--elf/dl-fini.c8
2 files changed, 12 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index afdb9a7ca4..72f8238979 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2000-05-08 Jakub Jelinek <jakub@redhat.com>
+
+ * elf/dl-fini.c (_dl_fini): Bump l_opencount of all objects so that
+ they are not dlclose'd from underneath us.
+
2000-05-08 Andreas Schwab <schwab@suse.de>
* posix/execle.c: Fix size parameter of memcpy.
diff --git a/elf/dl-fini.c b/elf/dl-fini.c
index f218689628..9b103aeb7e 100644
--- a/elf/dl-fini.c
+++ b/elf/dl-fini.c
@@ -58,7 +58,13 @@ _dl_fini (void)
the pointers in. */
maps = (struct link_map **) alloca (nloaded * sizeof (struct link_map *));
for (l = _dl_loaded, nloaded = 0; l != NULL; l = l->l_next)
- maps[nloaded++] = l;
+ {
+ maps[nloaded++] = l;
+
+ /* Bump l_opencount of all objects so that they are not dlclose()ed
+ from underneath us. */
+ ++l->l_opencount;
+ }
/* Now we have to do the sorting. */
for (l = _dl_loaded->l_next; l != NULL; l = l->l_next)