return rv;
}
+/* Helper to free typed parameters. */
+static void
+remoteFreeTypedParameters(remote_typed_param *args_params_val,
+ u_int args_params_len)
+{
+ u_int i;
+
+ if (args_params_val == NULL)
+ return;
+
+ for (i = 0; i < args_params_len; i++)
+ VIR_FREE(args_params_val[i].field);
+
+ VIR_FREE(args_params_val);
+}
+
/* Helper to serialize typed parameters. */
static int
remoteSerializeTypedParameters(virTypedParameterPtr params,
rv = 0;
cleanup:
- if (val) {
- for (i = 0; i < nparams; i++)
- VIR_FREE(val[i].field);
- VIR_FREE(val);
- }
+ remoteFreeTypedParameters(val, nparams);
return rv;
}
my @args_check_list = ();
my @setters_list = ();
my @setters_list2 = ();
+ my @free_list = ();
my $priv_src = "conn";
my $priv_name = "privateData";
my $call_args = "&args";
" xdr_free((xdrproc_t)xdr_$call->{args}, (char *)&args);\n" .
" goto done;\n" .
" }");
+ push(@free_list, " remoteFreeTypedParameters(args.params.params_val, args.params.params_len);\n");
} elsif ($args_member =~ m/^((?:unsigned )?int) (\S+);\s*\/\*\s*call-by-reference\s*\*\//) {
my $type_name = "$1 *";
my $arg_name = $2;
print "\n";
print "done:\n";
+
+ print join("\n", @free_list);
+
print " remoteDriverUnlock(priv);\n";
print " return rv;\n";
print "}\n";