[libvirt] [PATCH 2/4] Factor out def assignment to existing domain from virDomainAssignDef

Jiri Denemark jdenemar at redhat.com
Thu May 20 12:54:57 UTC 2010


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 20c9c51..c77ee59 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 a7206d3..9f87fc5 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 bdeab0f..1594a08 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -215,6 +215,7 @@ virDomainSnapshotObjUnref;
 virDomainSnapshotDefParseString;
 virDomainSnapshotDefFormat;
 virDomainSnapshotAssignDef;
+virDomainObjAssignDef;
 
 
 # domain_event.h
-- 
1.7.1




More information about the libvir-list mailing list