From: Matthias Bolte Date: Wed, 28 Jul 2010 13:42:10 +0000 (+0200) Subject: esx: Fix freeing of heterogeneous lists X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=5cff36e39ae691fbd7c40597df1732eecf294150;p=libvirt.git esx: Fix freeing of heterogeneous lists 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. --- diff --git a/src/esx/esx_vi_generator.py b/src/esx/esx_vi_generator.py index 82bc9b6fbd..44c34932dd 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,