[Mesa-dev] [PATCH v3 6/6] mesa/main: free locale at exit

Brian Paul brianp at vmware.com
Fri Jun 26 12:05:19 PDT 2015


On 06/26/2015 12:06 PM, Erik Faye-Lund wrote:
> In order to save a small leak if mesa is continously loaded and
> unloaded, let's free the locale when the shared object is unloaded.
>
> Signed-off-by: Erik Faye-Lund <kusmabite at gmail.com>
> Reviewed-by: Matt Turner <mattst88 at gmail.com>
> ---
>   src/mesa/main/context.c | 12 +++++++++++-
>   src/util/strtod.c       |  8 ++++++++
>   src/util/strtod.h       |  3 +++
>   3 files changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index e68de68..dee1fa8 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -346,6 +346,16 @@ _mesa_destroy_visual( struct gl_config *vis )
>   mtx_t OneTimeLock = _MTX_INITIALIZER_NP;
>
>
> +/**
> + * Calls all the various one-time-fini functions in Mesa
> + */
> +
> +static void
> +one_time_fini()

I think that should be one_time_fini(void) to be consistent and to avoid 
warnings with some compilers.


Otherwise, the series looks good to me.  Nice to see patch 1.  I 
remember writing that dumb code years ago.

Reviewed-by: Brian Paul <brianp at vmware.com>

> +{
> +   _mesa_destroy_shader_compiler();
> +   _mesa_locale_fini();
> +}
>
>   /**
>    * Calls all the various one-time-init functions in Mesa.
> @@ -385,7 +395,7 @@ one_time_init( struct gl_context *ctx )
>            _mesa_ubyte_to_float_color_tab[i] = (float) i / 255.0F;
>         }
>
> -      atexit(_mesa_destroy_shader_compiler);
> +      atexit(one_time_fini);
>
>   #if defined(DEBUG) && defined(__DATE__) && defined(__TIME__)
>         if (MESA_VERBOSE != 0) {
> diff --git a/src/util/strtod.c b/src/util/strtod.c
> index a4a60e0..ea7d395 100644
> --- a/src/util/strtod.c
> +++ b/src/util/strtod.c
> @@ -45,6 +45,14 @@ _mesa_locale_init(void)
>   #endif
>   }
>
> +void
> +_mesa_locale_fini(void)
> +{
> +#if defined(_GNU_SOURCE) && defined(HAVE_XLOCALE_H)
> +   freelocale(loc);
> +#endif
> +}
> +
>   /**
>    * Wrapper around strtod which uses the "C" locale so the decimal
>    * point is always '.'
> diff --git a/src/util/strtod.h b/src/util/strtod.h
> index b7e2beb..60e15cf 100644
> --- a/src/util/strtod.h
> +++ b/src/util/strtod.h
> @@ -34,6 +34,9 @@ extern "C" {
>   extern void
>   _mesa_locale_init(void);
>
> +extern void
> +_mesa_locale_fini(void);
> +
>   extern double
>   _mesa_strtod(const char *s, char **end);
>
>



More information about the mesa-dev mailing list