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

[Xen-changelog] [xen master] tools/xenstore: Fix memory leaks in the client



commit 42e896b257ad361137fd7629e20f2e1580c1a6cf
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Fri May 23 11:32:01 2014 +0100
Commit:     Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Mon Jun 2 14:47:34 2014 +0100

    tools/xenstore: Fix memory leaks in the client
    
    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>
    Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
 tools/xenstore/xenstore_client.c |   10 +++++++---
 1 files 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;
 }
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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