Paolo Bonzini <pbonz...@redhat.com> writes: > On 25/05/20 09:01, Markus Armbruster wrote: >>> Just remembered that we fail creating the machine and therefore abort. So >>> not necessary :) >> True. >> >> But let's review briefly what happens when a realize method fails. >> >> In theory, realize fails cleanly, i.e. doing nothing. Another attempt >> could be made then. >> >> In practice, realize failure is always followed by destruction, unless >> preempted by outright exit(1). >> >> Destroying a device must also destroy its components. >> >> Paolo, is destroying a realized device okay, or does it have to be >> unrealized first? I can't see automatic unrealize on destruction... > > It cannot happen, because a device must be unparented before it's > destroyed and unparenting takes care of unrealizing the device.
I can't see where unparenting takes care of unrealizing. Can you help me? > So the > stageobject lifetime should always proceed in this order: > > created > created, with parent > created, with parent, with bus (if applicable) > realizing > realized > unrealizing > unrealized > unrealized, without parent, with bus (if applicable) > unrealized, without parent, without bus > finalizing (without references) > finalized > freed > > Where the second and third would be fixed by moving /machine/unattached > from device_set_realized to qdev_realize. > > Paolo