# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1283278497 -3600
# Node ID 27540adca386d96d16c4f9e4465d65129b635cbe
# Parent de4a22b6f582fb140cc8a5618765c1461e2e01d9
libxl: correctly free Reference types in autogenerated destroy functions
References types should be recursively destroyed and then the actual
reference itself should be destroyed.
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
tools/libxl/gentypes.py | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
diff -r de4a22b6f582 -r 27540adca386 tools/libxl/gentypes.py
--- a/tools/libxl/gentypes.py Tue Aug 31 19:05:01 2010 +0100
+++ b/tools/libxl/gentypes.py Tue Aug 31 19:14:57 2010 +0100
@@ -64,6 +64,11 @@ def libxl_C_type_destroy(ty, v, referenc
deref = v + "->"
else:
deref = v + "."
+
+ if ty.passby == libxltypes.PASS_BY_REFERENCE and not reference:
+ makeref = "&"
+ else:
+ makeref = ""
s = ""
if isinstance(ty, libxltypes.KeyedUnion):
@@ -76,6 +81,8 @@ def libxl_C_type_destroy(ty, v, referenc
s += "}\n"
elif isinstance(ty, libxltypes.Reference):
s += libxl_C_type_destroy(ty.ref_type, v, True, indent, v)
+ if ty.destructor_fn is not None:
+ s += "%s(%s);\n" % (ty.destructor_fn, makeref + v)
elif isinstance(ty, libxltypes.Struct) and (parent is None or
ty.destructor_fn is None):
for f in [f for f in ty.fields if not f.const]:
@@ -84,11 +91,6 @@ def libxl_C_type_destroy(ty, v, referenc
else:
s += libxl_C_type_destroy(f.type, deref + f.name, False, "",
deref)
else:
- if ty.passby == libxltypes.PASS_BY_REFERENCE and not reference:
- makeref = "&"
- else:
- makeref = ""
-
if ty.destructor_fn is not None:
s += "%s(%s);\n" % (ty.destructor_fn, makeref + v)
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|