[libvirt] [PATCH] esx: Fix freeing of heterogeneous lists

Matthias Bolte matthias.bolte at googlemail.com
Thu Jul 29 10:29:19 UTC 2010


Always call the free function of the base type. The base type
function then dynamically dispatches the call to the free function
for the actual type.
---
 src/esx/esx_vi_generator.py |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/esx/esx_vi_generator.py b/src/esx/esx_vi_generator.py
index 82bc9b6..44c3493 100755
--- a/src/esx/esx_vi_generator.py
+++ b/src/esx/esx_vi_generator.py
@@ -684,7 +684,10 @@ class Object:
             source += "{\n"
 
             if self.features & Object.FEATURE__LIST:
-                source += "    esxVI_%s_Free(&item->_next);\n\n" % self.name
+                if self.extends is not None:
+                    source += "    esxVI_%s_Free((esxVI_%s **)&item->_next);\n\n" % (self.extends, self.extends)
+                else:
+                    source += "    esxVI_%s_Free(&item->_next);\n\n" % self.name
 
             source += self.generate_free_code()
 
@@ -701,7 +704,10 @@ class Object:
             source += "{\n"
 
             if self.features & Object.FEATURE__LIST:
-                source += "    esxVI_%s_Free(&item->_next);\n\n" % self.name
+                if self.extends is not None:
+                    source += "    esxVI_%s_Free((esxVI_%s **)&item->_next);\n\n" % (self.extends, self.extends)
+                else:
+                    source += "    esxVI_%s_Free(&item->_next);\n\n" % self.name
 
             source += self.generate_free_code()
 
@@ -1126,11 +1132,11 @@ additional_object_features = { "DatastoreInfo"              : Object.FEATURE__AN
                                "FileInfo"                   : Object.FEATURE__DYNAMIC_CAST,
                                "FileQuery"                  : Object.FEATURE__DYNAMIC_CAST,
                                "HostCpuIdInfo"              : Object.FEATURE__ANY_TYPE | Object.FEATURE__LIST,
-                               "HostDatastoreBrowserSearchResults" : Object.FEATURE__ANY_TYPE,
+                               "HostDatastoreBrowserSearchResults" : Object.FEATURE__LIST | Object.FEATURE__ANY_TYPE,
                                "ManagedObjectReference"     : Object.FEATURE__ANY_TYPE,
                                "ObjectContent"              : Object.FEATURE__DEEP_COPY | Object.FEATURE__LIST,
                                "PerfCounterInfo"            : Object.FEATURE__LIST,
-                               "PerfEntityMetric"           : Object.FEATURE__LIST |  Object.FEATURE__DYNAMIC_CAST,
+                               "PerfEntityMetric"           : Object.FEATURE__LIST | Object.FEATURE__DYNAMIC_CAST,
                                "PerfQuerySpec"              : Object.FEATURE__LIST,
                                "PerfMetricIntSeries"        : Object.FEATURE__DYNAMIC_CAST,
                                "PropertyFilterSpec"         : Object.FEATURE__LIST,
-- 
1.7.0.4




More information about the libvir-list mailing list