From 575cf9a9ce125f668e228485179fd8b41aeebab1 Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Thu, 20 May 2010 11:36:24 +0200 Subject: [PATCH] Factor out def assignment to existing domain from virDomainAssignDef We need to be able to assign new def to an existing virDomainObj which is already locked. This patch factors out the relevant code from virDomainAssignDef into virDomainObjAssignDef. --- src/conf/domain_conf.c | 36 +++++++++++++++++++++--------------- src/conf/domain_conf.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 20c9c51883..c77ee599e5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -808,6 +808,26 @@ static virDomainObjPtr virDomainObjNew(virCapsPtr caps) return domain; } +void virDomainObjAssignDef(virDomainObjPtr domain, + const virDomainDefPtr def, + bool live) +{ + if (!virDomainObjIsActive(domain)) { + if (live) { + /* save current configuration to be restored on domain shutdown */ + if (!domain->newDef) + domain->newDef = domain->def; + domain->def = def; + } else { + virDomainDefFree(domain->def); + domain->def = def; + } + } else { + virDomainDefFree(domain->newDef); + domain->newDef = def; + } +} + virDomainObjPtr virDomainAssignDef(virCapsPtr caps, virDomainObjListPtr doms, const virDomainDefPtr def, @@ -817,21 +837,7 @@ virDomainObjPtr virDomainAssignDef(virCapsPtr caps, char uuidstr[VIR_UUID_STRING_BUFLEN]; if ((domain = virDomainFindByUUID(doms, def->uuid))) { - if (!virDomainObjIsActive(domain)) { - if (live) { - /* save current configuration to be restored on domain shutdown */ - if (!domain->newDef) - domain->newDef = domain->def; - domain->def = def; - } else { - virDomainDefFree(domain->def); - domain->def = def; - } - } else { - virDomainDefFree(domain->newDef); - domain->newDef = def; - } - + virDomainObjAssignDef(domain, def, live); return domain; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index a7206d33ba..9f87fc514a 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -954,6 +954,9 @@ virDomainObjPtr virDomainAssignDef(virCapsPtr caps, virDomainObjListPtr doms, const virDomainDefPtr def, bool live); +void virDomainObjAssignDef(virDomainObjPtr domain, + const virDomainDefPtr def, + bool live); void virDomainRemoveInactive(virDomainObjListPtr doms, virDomainObjPtr dom); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index bdeab0f56a..1594a0859b 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -215,6 +215,7 @@ virDomainSnapshotObjUnref; virDomainSnapshotDefParseString; virDomainSnapshotDefFormat; virDomainSnapshotAssignDef; +virDomainObjAssignDef; # domain_event.h -- GitLab