This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[glibc/zack/no-nested-includes] iconv: Use __twalk_r in __gconv_release_shlib


https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=e863dbf6b26bfddf7c1e5faa1cbf41a5a3ee1382

commit e863dbf6b26bfddf7c1e5faa1cbf41a5a3ee1382
Author: Florian Weimer <fweimer@redhat.com>
Date:   Tue Jun 4 14:05:44 2019 +0200

    iconv: Use __twalk_r in __gconv_release_shlib

Diff:
---
 ChangeLog        |  6 ++++++
 iconv/gconv_dl.c | 14 +++-----------
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 0d749e3..d15a68a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2019-06-04  Florian Weimer  <fweimer@redhat.com>
+
+	* iconv/gconv_dl.c (release_handle): Remove file-level definition.
+	(do_release_shlib): Adjust for __twalk_r.
+	(__gconv_release_shlib): Call __twalk_r.
+
 2019-06-04  Andreas Schwab  <schwab@suse.de>
 
 	[BZ #18830]
diff --git a/iconv/gconv_dl.c b/iconv/gconv_dl.c
index cf7023a..c0342d8 100644
--- a/iconv/gconv_dl.c
+++ b/iconv/gconv_dl.c
@@ -149,15 +149,10 @@ __gconv_find_shlib (const char *name)
   return found;
 }
 
-
-/* This is very ugly but the tsearch functions provide no way to pass
-   information to the walker function.  So we use a global variable.
-   It is MT safe since we use a lock.  */
-static struct __gconv_loaded_object *release_handle;
-
 static void
-do_release_shlib (void *nodep, VISIT value, int level)
+do_release_shlib (const void *nodep, VISIT value, void *closure)
 {
+  struct __gconv_loaded_object *release_handle = closure;
   struct __gconv_loaded_object *obj = *(struct __gconv_loaded_object **) nodep;
 
   if (value != preorder && value != leaf)
@@ -184,13 +179,10 @@ do_release_shlib (void *nodep, VISIT value, int level)
 void
 __gconv_release_shlib (struct __gconv_loaded_object *handle)
 {
-  /* Urgh, this is ugly but we have no other possibility.  */
-  release_handle = handle;
-
   /* Process all entries.  Please note that we also visit entries
      with release counts <= 0.  This way we can finally unload them
      if necessary.  */
-  __twalk (loaded, (__action_fn_t) do_release_shlib);
+  __twalk_r (loaded, do_release_shlib, handle);
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]