diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2010-08-31 19:16:23 +0100 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2010-08-31 19:16:23 +0100 |
commit | 4883b4ee766718b56bfd1806b9cefd0792215e1f (patch) | |
tree | d3883ca406939a74a1ae0ef2d003c7297c45de69 /tools | |
parent | a703824d6d6ff5ddf4f3bc57a81a889de0a97d72 (diff) | |
download | xen-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.c | 6 | ||||
-rw-r--r-- | tools/libxl/libxl.h | 4 | ||||
-rw-r--r-- | tools/libxl/libxl.idl | 4 | ||||
-rw-r--r-- | tools/libxl/libxltypes.py | 2 |
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) |