diff --git a/hw/qdev.c b/hw/qdev.c index ebddcaedbddfb6af7bf7a627aaa8924749049c26..3ce69be47e7a4d68cd1ba068dce6402ac9eb1fdf 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -218,6 +218,7 @@ DeviceState *qdev_device_add(QemuOpts *opts) qdev_free(qdev); return NULL; } + qdev->opts = opts; return qdev; } @@ -276,6 +277,8 @@ void qdev_free(DeviceState *dev) qemu_unregister_reset(dev->info->reset, dev); if (dev->info->exit) dev->info->exit(dev); + if (dev->opts) + qemu_opts_del(dev->opts); } QLIST_REMOVE(dev, sibling); qemu_free(dev); diff --git a/hw/qdev.h b/hw/qdev.h index ca7c21a3bd23c57926ba8ec8560e8e1e11fed257..7da78378bfb2d1277d45a522a345b0d992388349 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -29,6 +29,7 @@ enum DevState { struct DeviceState { const char *id; enum DevState state; + QemuOpts *opts; int hotplugged; DeviceInfo *info; BusState *parent_bus;