[PATCH libXau] Free XauFileName() static buffer at exit

Mark Kettenis mark.kettenis at xs4all.nl
Sat Apr 21 02:47:39 PDT 2012


> From: Chase Douglas <chase.douglas at canonical.com>
> Date: Fri, 20 Apr 2012 14:18:59 -0700
> 
> XauFileName() may allocate and return a static buffer. The only
> way to ensure it is freed is to deallocate it when the program exits.

Which is fairly pointless given that the program is exiting anyway.

I guess you're using some sort of tool to detect memory leaks.  I
don't think the additional code bloat is worth it to avoid what's
arguably a false positive.

> Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
> ---
>  AuFileName.c |   17 ++++++++++++++++-
>  1 files changed, 16 insertions(+), 1 deletions(-)
> 
> diff --git a/AuFileName.c b/AuFileName.c
> index f384f75..bc7b177 100644
> --- a/AuFileName.c
> +++ b/AuFileName.c
> @@ -31,13 +31,22 @@ in this Software without prior written authorization from The Open Group.
>  #include <X11/Xos.h>
>  #include <stdlib.h>
>  
> +static char *buf = NULL;
> +
> +static void
> +free_filename_buffer(void)
> +{
> +    free(buf);
> +    buf = NULL;
> +}
> +
>  char *
>  XauFileName (void)
>  {
>      const char *slashDotXauthority = "/.Xauthority";
>      char    *name;
> -    static char	*buf;
>      static int	bsize;
> +    static int atexit_registered = 0;
>  #ifdef WIN32
>      char    dir[128];
>  #endif
> @@ -64,6 +73,12 @@ XauFileName (void)
>  	buf = malloc ((unsigned) size);
>  	if (!buf)
>  	    return NULL;
> +
> +        if (!atexit_registered) {
> +            atexit(free_filename_buffer);
> +            atexit_registered = 1;
> +        }
> +
>  	bsize = size;
>      }
>      strcpy (buf, name);
> -- 
> 1.7.9.1
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 


More information about the xorg-devel mailing list