diff options
author | Ulrich Drepper <drepper@redhat.com> | 1999-01-28 16:21:30 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1999-01-28 16:21:30 +0000 |
commit | e6df9a569331c30b85a629d3312443454273848b (patch) | |
tree | b152c1907f873a40209ec77e2df701bd466c2103 /iconv/gconv_dl.c | |
parent | bb7acc5fff4287de6c7d7863487fa506fa993764 (diff) | |
download | glibc-e6df9a569331c30b85a629d3312443454273848b.tar.gz glibc-e6df9a569331c30b85a629d3312443454273848b.tar.xz glibc-e6df9a569331c30b85a629d3312443454273848b.zip |
Update.
* iconv/gconv_dl.c: Unload all modules when debugging memory use.
Diffstat (limited to 'iconv/gconv_dl.c')
-rw-r--r-- | iconv/gconv_dl.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/iconv/gconv_dl.c b/iconv/gconv_dl.c index 7c64a912d9..5650389c78 100644 --- a/iconv/gconv_dl.c +++ b/iconv/gconv_dl.c @@ -1,5 +1,5 @@ /* Handle loading/unloading of shared object for transformation. - Copyright (C) 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -250,3 +250,28 @@ __gconv_release_shlib (struct gconv_loaded_object *handle) return GCONV_OK; } + + +/* We run this if we debug the memory allocation. */ +static void +do_release_all (const void *nodep, VISIT value, int level) +{ + struct gconv_loaded_object *obj = *(struct gconv_loaded_object **) nodep; + + if (value != preorder && value != leaf) + return; + + /* Unload the shared object. We don't use the trick to + catch errors since in the case an error is signalled + something is really wrong. */ + _dl_close (obj->handle); + + free (obj); +} + +static void __attribute__ ((unused)) +free_mem (void) +{ + __twalk (loaded, do_release_all); +} +text_set_element (__libc_subfreeres, free_mem); |