Back in abe147e0ce4 when fw_cfg_add_file() was introduced, there was no QOM design, object where not created and released at runtime. Later 38f3adc34d finished the QOM conversion of the fw_cfg device, adding the fw_cfg_common_realize() method. The time has come to add the equivalent destructor and release the memory allocated for 'files'.
Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com> --- hw/nvram/fw_cfg.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index b2dc0a80cb..0fb020edce 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -959,6 +959,13 @@ static void fw_cfg_common_realize(DeviceState *dev, Error **errp) qemu_add_machine_init_done_notifier(&s->machine_ready); } +static void fw_cfg_common_unrealize(DeviceState *dev, Error **errp) +{ + FWCfgState *s = FW_CFG(dev); + + g_free(s->files); +} + FWCfgState *fw_cfg_init_io_dma(uint32_t iobase, uint32_t dma_iobase, AddressSpace *dma_as) { @@ -1127,6 +1134,7 @@ static void fw_cfg_io_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); dc->realize = fw_cfg_io_realize; + dc->unrealize = fw_cfg_common_unrealize; dc->props = fw_cfg_io_properties; } @@ -1190,6 +1198,7 @@ static void fw_cfg_mem_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); dc->realize = fw_cfg_mem_realize; + dc->unrealize = fw_cfg_common_unrealize; dc->props = fw_cfg_mem_properties; } -- 2.20.1