1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2024-12-22 17:34:18 +03:00

ESX: Fix DISPATCH_FREE generation code to free all extended objects

Python code generator "generate_source" section that handles
code generation to "free" inherited objects needs to generate
DISPATCH_FREE calls for all extended_by objects.
This commit is contained in:
Ata E Husain Bohra 2013-01-01 22:22:28 -08:00 committed by Matthias Bolte
parent 3a82f628a9
commit 4e650435ed

View File

@ -4,6 +4,7 @@
# esx_vi_generator.py: generates most of the SOAP type mapping code
#
# Copyright (C) 2010-2012 Matthias Bolte <matthias.bolte@googlemail.com>
# Copyright (C) 2013 Ata E Husain Bohra <ata.husain@hotmail.com>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@ -785,16 +786,14 @@ class Object(Type):
source += "ESX_VI__TEMPLATE__DYNAMIC_FREE(%s,\n" % self.name
source += "{\n"
for extended_by in self.extended_by:
source += " ESX_VI__TEMPLATE__DISPATCH__FREE(%s)\n" \
% extended_by
source += self.generate_dispatch('FREE')
source += "},\n"
source += "{\n"
if self.features & Object.FEATURE__LIST:
if self.extends is not None:
# avoid "dereferencing type-punned pointer will brea
# avoid "dereferencing type-punned pointer will break
# strict-aliasing rules" warnings
source += " esxVI_%s *next = (esxVI_%s *)item->_next;\n\n" \
% (self.extends, self.extends)
@ -1004,6 +1003,26 @@ class ManagedObject(Type):
return members
def generate_dispatch(self, suffix, is_first=True):
source = ""
if self.extended_by is not None:
if not is_first:
source += "\n"
source += " /* %s */\n" % self.name
for extended_by in self.extended_by:
source += " ESX_VI__TEMPLATE__DISPATCH__%s(%s)\n" \
% (suffix, extended_by)
for extended_by in self.extended_by:
source += managed_objects_by_name[extended_by] \
.generate_dispatch(suffix, False)
return source
def generate_free_code(self, add_banner=False):
source = ""
@ -1220,13 +1239,12 @@ class ManagedObject(Type):
source += "ESX_VI__TEMPLATE__DYNAMIC_FREE(%s,\n" % self.name
source += "{\n"
for extended_by in self.extended_by:
source += " ESX_VI__TEMPLATE__DISPATCH__FREE(%s)\n" % extended_by
source += self.generate_dispatch('FREE')
source += "},\n"
source += "{\n"
if self.features & Object.FEATURE__LIST:
if self.features & ManagedObject.FEATURE__LIST:
if self.extends is not None:
# avoid "dereferencing type-punned pointer will break
# strict-aliasing rules" warnings