Correctly free memory in RHashtable binding for OCaml & Python.
authorRichard Jones <rjones@redhat.com>
Wed, 15 Apr 2009 13:09:01 +0000 (14:09 +0100)
committerRichard Jones <rjones@redhat.com>
Wed, 15 Apr 2009 13:09:01 +0000 (14:09 +0100)
ocaml/guestfs_c_actions.c
python/guestfs-py.c
src/generator.ml

index b1c4652..a3186d1 100644 (file)
@@ -1919,6 +1919,7 @@ ocaml_guestfs_tune2fs_l (value gv, value devicev)
     caml_failwith ("tune2fs_l: used handle after closing it");
 
   const char *device = String_val (devicev);
+  int i;
   char **r;
 
   caml_enter_blocking_section ();
@@ -1928,6 +1929,7 @@ ocaml_guestfs_tune2fs_l (value gv, value devicev)
     ocaml_guestfs_raise_error (g, "tune2fs_l");
 
   rv = copy_table (r);
+  for (i = 0; r[i] != NULL; ++i) free (r[i]);
   free (r);
   CAMLreturn (rv);
 }
index 8fbab74..21ecd54 100644 (file)
@@ -2072,7 +2072,7 @@ py_guestfs_tune2fs_l (PyObject *self, PyObject *args)
   }
 
   py_r = put_table (r);
-  free (r);
+  free_strings (r);
   return py_r;
 }
 
index b1071a8..c20e43f 100755 (executable)
@@ -3533,6 +3533,7 @@ copy_table (char * const * argv)
        | RStatVFS _ ->
            pr "  struct guestfs_statvfs *r;\n"; "NULL"
        | RHashtable _ ->
+           pr "  int i;\n";
            pr "  char **r;\n";
            "NULL" in
       pr "\n";
@@ -3588,6 +3589,7 @@ copy_table (char * const * argv)
           pr "  free (r);\n";
        | RHashtable _ ->
           pr "  rv = copy_table (r);\n";
+          pr "  for (i = 0; r[i] != NULL; ++i) free (r[i]);\n";
           pr "  free (r);\n";
       );
 
@@ -4447,7 +4449,7 @@ py_guestfs_close (PyObject *self, PyObject *args)
           pr "  free (r);\n"
        | RHashtable n ->
           pr "  py_r = put_table (r);\n";
-          pr "  free (r);\n"
+          pr "  free_strings (r);\n"
       );
 
       pr "  return py_r;\n";