[Libguestfs] [PATCH] daemon: Use CLEANUP_* functions to avoid an explicit free in stub functions.

Richard W.M. Jones rjones at redhat.com
Tue Apr 25 11:40:29 UTC 2017


---
 generator/daemon.ml | 21 ++++++++-------------
 1 file changed, 8 insertions(+), 13 deletions(-)

diff --git a/generator/daemon.ml b/generator/daemon.ml
index b00627063..9d5ba00b2 100644
--- a/generator/daemon.ml
+++ b/generator/daemon.ml
@@ -155,13 +155,13 @@ let generate_daemon_stubs actions () =
        | RBool _ -> pr "  int r;\n"
        | RConstString _ | RConstOptString _ ->
            failwithf "RConstString|RConstOptString cannot be used by daemon functions"
-       | RString _ -> pr "  char *r;\n"
-       | RStringList _ | RHashtable _ -> pr "  char **r;\n"
-       | RStruct (_, typ) -> pr "  guestfs_int_%s *r;\n" typ
-       | RStructList (_, typ) -> pr "  guestfs_int_%s_list *r;\n" typ
+       | RString _ -> pr "  CLEANUP_FREE char *r = NULL;\n"
+       | RStringList _ | RHashtable _ -> pr "  CLEANUP_FREE_STRING_LIST char **r = NULL;\n"
+       | RStruct (_, typ) -> pr "  CLEANUP_FREE guestfs_int_%s *r = NULL;\n" typ
+       | RStructList (_, typ) -> pr "  CLEANUP_FREE guestfs_int_%s_list *r = NULL;\n" typ
        | RBufferOut _ ->
            pr "  size_t size = 1;\n";
-           pr "  char *r;\n"
+           pr "  CLEANUP_FREE char *r = NULL;\n"
       );
 
       if args_passed_to_daemon <> [] then (
@@ -384,19 +384,16 @@ let generate_daemon_stubs actions () =
             pr "  struct guestfs_%s_ret ret;\n" name;
             pr "  ret.%s = r;\n" n;
             pr "  reply ((xdrproc_t) &xdr_guestfs_%s_ret, (char *) &ret);\n"
-              name;
-            pr "  free (r);\n"
+              name
         | RStringList n | RHashtable n ->
             pr "  struct guestfs_%s_ret ret;\n" name;
             pr "  ret.%s.%s_len = count_strings (r);\n" n n;
             pr "  ret.%s.%s_val = r;\n" n n;
             pr "  reply ((xdrproc_t) &xdr_guestfs_%s_ret, (char *) &ret);\n"
-              name;
-            pr "  free_strings (r);\n"
+              name
         | RStruct (n, _) ->
             pr "  struct guestfs_%s_ret ret;\n" name;
             pr "  ret.%s = *r;\n" n;
-            pr "  free (r);\n";
             pr "  reply ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n"
               name;
             pr "  xdr_free ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n"
@@ -404,7 +401,6 @@ let generate_daemon_stubs actions () =
         | RStructList (n, _) ->
             pr "  struct guestfs_%s_ret ret;\n" name;
             pr "  ret.%s = *r;\n" n;
-            pr "  free (r);\n";
             pr "  reply ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n"
               name;
             pr "  xdr_free ((xdrproc_t) xdr_guestfs_%s_ret, (char *) &ret);\n"
@@ -414,8 +410,7 @@ let generate_daemon_stubs actions () =
             pr "  ret.%s.%s_val = r;\n" n n;
             pr "  ret.%s.%s_len = size;\n" n n;
             pr "  reply ((xdrproc_t) &xdr_guestfs_%s_ret, (char *) &ret);\n"
-              name;
-            pr "  free (r);\n"
+              name
       );
       pr "}\n\n";
   ) (actions |> daemon_functions |> sort)
-- 
2.12.0




More information about the Libguestfs mailing list