* [PATCH] tools/xenstore: Fix memory leaks in the client
@ 2014-05-23 10:32 Andrew Cooper
2014-06-02 9:42 ` Andrew Cooper
2014-06-02 14:41 ` Ian Campbell
0 siblings, 2 replies; 3+ messages in thread
From: Andrew Cooper @ 2014-05-23 10:32 UTC (permalink / raw)
To: Xen-devel; +Cc: Andrew Cooper, Ian Jackson, Ian Campbell
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@citrix.com>
CC: Ian Campbell <Ian.Campbell@citrix.com>
CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
---
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;
}
--
1.7.10.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] tools/xenstore: Fix memory leaks in the client
2014-05-23 10:32 [PATCH] tools/xenstore: Fix memory leaks in the client Andrew Cooper
@ 2014-06-02 9:42 ` Andrew Cooper
2014-06-02 14:41 ` Ian Campbell
1 sibling, 0 replies; 3+ messages in thread
From: Andrew Cooper @ 2014-06-02 9:42 UTC (permalink / raw)
To: Andrew Cooper; +Cc: Ian Jackson, Ian Campbell, Xen-devel
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@citrix.com>
> CC: Ian Campbell <Ian.Campbell@citrix.com>
> CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
> ---
> 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;
> }
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] tools/xenstore: Fix memory leaks in the client
2014-05-23 10:32 [PATCH] tools/xenstore: Fix memory leaks in the client Andrew Cooper
2014-06-02 9:42 ` Andrew Cooper
@ 2014-06-02 14:41 ` Ian Campbell
1 sibling, 0 replies; 3+ messages in thread
From: Ian Campbell @ 2014-06-02 14:41 UTC (permalink / raw)
To: Andrew Cooper; +Cc: Ian Jackson, Xen-devel
On Fri, 2014-05-23 at 11:32 +0100, 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@citrix.com>
> CC: Ian Campbell <Ian.Campbell@citrix.com>
> CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
Acked + applied, thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-06-02 14:41 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-23 10:32 [PATCH] tools/xenstore: Fix memory leaks in the client Andrew Cooper
2014-06-02 9:42 ` Andrew Cooper
2014-06-02 14:41 ` Ian Campbell
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.