This is the mail archive of the libc-alpha@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]

Re: [PATCH] iconv: Use __twalk_r in __gconv_release_shlib


* Florian Weimer:

> 2019-05-02  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.
>
> diff --git a/iconv/gconv_dl.c b/iconv/gconv_dl.c
> index cf7023a9aa..8379a488ed 100644
> --- a/iconv/gconv_dl.c
> +++ b/iconv/gconv_dl.c
> @@ -149,15 +149,11 @@ __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 +180,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);
>  }

Ping?  This gets rid of “very ugly” code (their words, not mine).

Thanks,
Florian


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