[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] tools/xenstore: Fix memory leaks in the client



Ping

On 23/05/14 11:32, Andrew Cooper wrote:
> Free the expanding buffer and output buffer after use.  Close the xenstore
> handle after use.
>
> The command line client is now valgrind-clean.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
> CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
> ---
>  tools/xenstore/xenstore_client.c |   10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/tools/xenstore/xenstore_client.c 
> b/tools/xenstore/xenstore_client.c
> index 0ec103f..56b9309 100644
> --- a/tools/xenstore/xenstore_client.c
> +++ b/tools/xenstore/xenstore_client.c
> @@ -40,6 +40,7 @@ enum mode {
>  
>  static char *output_buf = NULL;
>  static int output_pos = 0;
> +static struct expanding_buffer ebuf;
>  
>  static int output_size = 0;
>  
> @@ -126,7 +127,6 @@ static int show_whole_path = 0;
>  
>  static void do_ls(struct xs_handle *h, char *path, int cur_depth, int 
> show_perms)
>  {
> -    static struct expanding_buffer ebuf;
>      char **e;
>      char newpath[STRING_MAX], *val;
>      int newpath_len;
> @@ -308,7 +308,6 @@ perform(enum mode mode, int optind, int argc, char 
> **argv, struct xs_handle *xsh
>              /* CANNOT BE REACHED */
>              errx(1, "invalid mode %d", mode);
>          case MODE_read: {
> -            static struct expanding_buffer ebuf;
>              unsigned len;
>              char *val = xs_read(xsh, xth, argv[optind], &len);
>              if (val == NULL) {
> @@ -323,7 +322,6 @@ perform(enum mode mode, int optind, int argc, char 
> **argv, struct xs_handle *xsh
>              break;
>          }
>          case MODE_write: {
> -            static struct expanding_buffer ebuf;
>              char *val_spec = argv[optind + 1];
>              unsigned len;
>              expanding_buffer_ensure(&ebuf, strlen(val_spec)+1);
> @@ -655,5 +653,11 @@ again:
>      if (output_pos)
>       printf("%s", output_buf);
>  
> +    free(output_buf);
> +    free(ebuf.buf);
> +
> +    if (xsh)
> +        xs_close(xsh);
> +
>      return ret;
>  }


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.