From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH] tools/xenstore: Fix memory leaks in the client Date: Mon, 2 Jun 2014 10:42:13 +0100 Message-ID: <538C46F5.3040205@citrix.com> References: <1400841121-26874-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1400841121-26874-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Andrew Cooper Cc: Ian Jackson , Ian Campbell , Xen-devel List-Id: xen-devel@lists.xenproject.org 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 > CC: Ian Campbell > CC: Ian Jackson > --- > 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; > }