Peter Xu <pet...@redhat.com> writes: > This makes the migration object a singleton unit. After this, we can do > something slightly tricky later on with the guarantee that nobody will be > able to create the object twice. > > Signed-off-by: Peter Xu <pet...@redhat.com> > --- > migration/migration.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/migration/migration.c b/migration/migration.c > index bcb735869b..1b5285af95 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -45,6 +45,7 @@ > #include "qapi/qmp/qerror.h" > #include "qapi/qmp/qnull.h" > #include "qemu/rcu.h" > +#include "qom/object_interfaces.h" > #include "postcopy-ram.h" > #include "qemu/thread.h" > #include "trace.h" > @@ -3855,11 +3856,19 @@ fail: > migrate_fd_cleanup(s); > } > > +static Object* migration_get_instance(Error **errp)
static Object *migration_get_instance(Error **errp) ^ > +{ > + return OBJECT(current_migration); > +} > + > static void migration_class_init(ObjectClass *klass, void *data) > { > DeviceClass *dc = DEVICE_CLASS(klass); > + SingletonClass *singleton = SINGLETON_CLASS(klass); > > dc->user_creatable = false; > + singleton->get_instance = migration_get_instance; > + > device_class_set_props(dc, migration_properties); > } > > @@ -3932,6 +3941,10 @@ static const TypeInfo migration_type = { > .instance_size = sizeof(MigrationState), > .instance_init = migration_instance_init, > .instance_finalize = migration_instance_finalize, > + .interfaces = (InterfaceInfo[]) { > + { TYPE_SINGLETON }, > + { } > + } > }; > > static void register_migration_types(void)