|
@@ -270,6 +270,16 @@ static void virtio_input_device_realize(DeviceState *dev, Error **errp)
|
|
vinput->sts = virtio_add_queue(vdev, 64, virtio_input_handle_sts);
|
|
vinput->sts = virtio_add_queue(vdev, 64, virtio_input_handle_sts);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void virtio_input_finalize(Object *obj)
|
|
|
|
+{
|
|
|
|
+ VirtIOInput *vinput = VIRTIO_INPUT(obj);
|
|
|
|
+ VirtIOInputConfig *cfg, *next;
|
|
|
|
+
|
|
|
|
+ QTAILQ_FOREACH_SAFE(cfg, &vinput->cfg_list, node, next) {
|
|
|
|
+ QTAILQ_REMOVE(&vinput->cfg_list, cfg, node);
|
|
|
|
+ g_free(cfg);
|
|
|
|
+ }
|
|
|
|
+}
|
|
static void virtio_input_device_unrealize(DeviceState *dev, Error **errp)
|
|
static void virtio_input_device_unrealize(DeviceState *dev, Error **errp)
|
|
{
|
|
{
|
|
VirtIOInputClass *vic = VIRTIO_INPUT_GET_CLASS(dev);
|
|
VirtIOInputClass *vic = VIRTIO_INPUT_GET_CLASS(dev);
|
|
@@ -318,6 +328,7 @@ static const TypeInfo virtio_input_info = {
|
|
.class_size = sizeof(VirtIOInputClass),
|
|
.class_size = sizeof(VirtIOInputClass),
|
|
.class_init = virtio_input_class_init,
|
|
.class_init = virtio_input_class_init,
|
|
.abstract = true,
|
|
.abstract = true,
|
|
|
|
+ .instance_finalize = virtio_input_finalize,
|
|
};
|
|
};
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
/* ----------------------------------------------------------------- */
|