about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--iconv/gconv_dl.c3
-rw-r--r--locale/loadarchive.c9
-rw-r--r--sysdeps/unix/sysv/linux/fexecve.c1
4 files changed, 18 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 2714b51d52..652f67bbc3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
+2002-11-05  Jakub Jelinek  <jakub@redhat.com>
+
+	* iconv/gconv_dl.c (free_mem): Clear loaded.
+	* locale/loadarchive.c (_nl_archive_subfreeres): Call locale_data's
+	cleanup if any.
+
 2002-11-05  Ulrich Drepper  <drepper@redhat.com>
 
+	* sysdeps/unix/sysv/linux/fexecve.c: Include <stdio.h>.
+
 	* libio/ioseekoff.c: Remove INTDEF.  Define _IO_seekoff_unlocked.  Same
 	as old code without locking.  _IO_seekoff calls this function after
 	locking the stream.
diff --git a/iconv/gconv_dl.c b/iconv/gconv_dl.c
index ff90a54b41..cc7627aba2 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, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -206,6 +206,7 @@ do_release_all (void *nodep)
 libc_freeres_fn (free_mem)
 {
   __tdestroy (loaded, do_release_all);
+  loaded = NULL;
 }
 
 
diff --git a/locale/loadarchive.c b/locale/loadarchive.c
index dbb4d7afd5..3fddc7d05b 100644
--- a/locale/loadarchive.c
+++ b/locale/loadarchive.c
@@ -510,8 +510,13 @@ _nl_archive_subfreeres (void)
       free (dead->name);
       for (category = 0; category < __LC_LAST; ++category)
 	if (category != LC_ALL)
-	  /* _nl_unload_locale just does this free for the archive case.  */
-	  free (dead->data[category]);
+	  {
+	    /* _nl_unload_locale just does this free for the archive case.  */
+	    if (dead->data[category]->private.cleanup)
+	      (*dead->data[category]->private.cleanup) (dead->data[category]);
+
+	    free (dead->data[category]);
+	  }
       free (dead);
     }
   archloaded = NULL;
diff --git a/sysdeps/unix/sysv/linux/fexecve.c b/sysdeps/unix/sysv/linux/fexecve.c
index dbf56907bb..a90364eb49 100644
--- a/sysdeps/unix/sysv/linux/fexecve.c
+++ b/sysdeps/unix/sysv/linux/fexecve.c
@@ -18,6 +18,7 @@
 
 #include <errno.h>
 #include <stddef.h>
+#include <stdio.h>
 #include <unistd.h>
 #include <sys/stat.h>