From: Gonglei <[email protected]> Forcefully unrealize all children regardless of early-iteration errors(if happened). We should keep going with cleanup operation rather than report a error immediately.
Signed-off-by: Gonglei <[email protected]> --- hw/core/qdev.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 4a1ac5b..d3ff526 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -873,15 +873,12 @@ static void device_set_realized(Object *obj, bool value, Error **errp) } else if (!value && dev->realized) { QLIST_FOREACH(bus, &dev->child_bus, sibling) { object_property_set_bool(OBJECT(bus), false, "realized", - &local_err); - if (local_err != NULL) { - break; - } + NULL); } - if (qdev_get_vmsd(dev) && local_err == NULL) { + if (qdev_get_vmsd(dev)) { vmstate_unregister(dev, qdev_get_vmsd(dev), dev); } - if (dc->unrealize && local_err == NULL) { + if (dc->unrealize) { dc->unrealize(dev, &local_err); } dev->pending_deleted_event = true; -- 1.7.12.4
