aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2010-08-31 19:16:23 +0100
committerIan Campbell <ian.campbell@citrix.com>2010-08-31 19:16:23 +0100
commit4883b4ee766718b56bfd1806b9cefd0792215e1f (patch)
treed3883ca406939a74a1ae0ef2d003c7297c45de69 /tools
parenta703824d6d6ff5ddf4f3bc57a81a889de0a97d72 (diff)
downloadxen-4883b4ee766718b56bfd1806b9cefd0792215e1f.tar.gz
xen-4883b4ee766718b56bfd1806b9cefd0792215e1f.tar.bz2
xen-4883b4ee766718b56bfd1806b9cefd0792215e1f.zip
libxl: builtin list types should be pass-by-reference
This makes all _destroy functions consistent wrt freeing the actual reference passed in. Previously we were relying on the reference contained within the type itself which worked but was semantically a little confusing. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/libxl/libxl.c6
-rw-r--r--tools/libxl/libxl.h4
-rw-r--r--tools/libxl/libxl.idl4
-rw-r--r--tools/libxl/libxltypes.py2
4 files changed, 10 insertions, 6 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 271134d7bc..03d4f313e1 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -73,9 +73,10 @@ int libxl_ctx_free(libxl_ctx *ctx)
return 0;
}
-void libxl_string_list_destroy(libxl_string_list sl)
+void libxl_string_list_destroy(libxl_string_list *psl)
{
int i;
+ libxl_string_list sl = *psl;
if (!sl)
return;
@@ -85,9 +86,10 @@ void libxl_string_list_destroy(libxl_string_list sl)
free(sl);
}
-void libxl_key_value_list_destroy(libxl_key_value_list kvl)
+void libxl_key_value_list_destroy(libxl_key_value_list *pkvl)
{
int i;
+ libxl_key_value_list kvl = *pkvl;
if (!kvl)
return;
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 82a06ee38a..80aef7ab38 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -234,8 +234,8 @@ int libxl_domain_destroy(libxl_ctx *ctx, uint32_t domid, int force);
int libxl_domain_preserve(libxl_ctx *ctx, uint32_t domid, libxl_domain_create_info *info, const char *name_suffix, libxl_uuid new_uuid);
/* destructors for builtin data types */
-void libxl_string_list_destroy(libxl_string_list sl);
-void libxl_key_value_list_destroy(libxl_key_value_list kvl);
+void libxl_string_list_destroy(libxl_string_list *sl);
+void libxl_key_value_list_destroy(libxl_key_value_list *kvl);
void libxl_file_reference_destroy(libxl_file_reference *f);
/*
diff --git a/tools/libxl/libxl.idl b/tools/libxl/libxl.idl
index f59950d3e8..1e36926c61 100644
--- a/tools/libxl/libxl.idl
+++ b/tools/libxl/libxl.idl
@@ -12,8 +12,8 @@ libxl_console_constype = Builtin("console_constype")
libxl_disk_phystype = Builtin("disk_phystype")
libxl_nic_type = Builtin("nic_type")
-libxl_string_list = Builtin("string_list", destructor_fn="libxl_string_list_destroy")
-libxl_key_value_list = Builtin("key_value_list", destructor_fn="libxl_key_value_list_destroy")
+libxl_string_list = Builtin("string_list", destructor_fn="libxl_string_list_destroy", passby=PASS_BY_REFERENCE)
+libxl_key_value_list = Builtin("key_value_list", destructor_fn="libxl_key_value_list_destroy", passby=PASS_BY_REFERENCE)
libxl_cpumap = Builtin("cpumap", destructor_fn="free")
diff --git a/tools/libxl/libxltypes.py b/tools/libxl/libxltypes.py
index 5caff9c2e1..2b2db9ae54 100644
--- a/tools/libxl/libxltypes.py
+++ b/tools/libxl/libxltypes.py
@@ -182,6 +182,8 @@ def parse(f):
globs[n] = t
elif isinstance(t,type(object)) and issubclass(t, Type):
globs[n] = t
+ elif n in ['PASS_BY_REFERENCE', 'PASS_BY_VALUE']:
+ globs[n] = t
try:
execfile(f, globs, locs)