From 4ce636da6cf71061410da841e12b27b5f551e879 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 1 Sep 1998 23:08:36 +0000 Subject: Update. * elf/dl-close.c (_dl_close): Add more comments and correct some. Free l_searchlist and l_dupsearchlist. --- elf/dl-close.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'elf') diff --git a/elf/dl-close.c b/elf/dl-close.c index 94978ed..3b1e3c9 100644 --- a/elf/dl-close.c +++ b/elf/dl-close.c @@ -116,8 +116,8 @@ _dl_close (struct link_map *map) } /* We can unmap all the maps at once. We determined the - length when we loaded the object and `munmap' call does - the rest. */ + start address and length when we loaded the object and + the `munmap' call does the rest. */ __munmap ((void *) imap->l_map_start, imap->l_map_end - imap->l_map_start); @@ -143,8 +143,9 @@ _dl_close (struct link_map *map) if (imap->l_origin != NULL) free ((char *) imap->l_origin); - /* These names always is allocated. */ + /* This name always is allocated. */ free (imap->l_name); + /* Remove the list with all the names of the shared object. */ lnp = imap->l_libname; do { @@ -154,6 +155,17 @@ _dl_close (struct link_map *map) } while (lnp != NULL); + /* Remove the searchlists. */ + if (imap->l_dupsearchlist != imap->l_searchlist) + { + /* If a l_searchlist object exists there always also is + a l_dupsearchlist object. */ + assert (imap->l_dupsearchlist != NULL); + free (imap->l_dupsearchlist); + } + if (imap != map && imap->l_searchlist != NULL) + free (imap->l_searchlist); + free (imap); } } -- cgit v1.1