[libvirt] [PATCH 11/08] interface: Alter virInterfaceObjListAssignDef @def param

John Ferlan jferlan at redhat.com
Thu May 25 16:18:34 UTC 2017


Rather than pass by value, let's pass by reference since the object ends
up "owning" the XML definition, let's make that ownership a bit more real.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---

Since 09 and 10 weren't reviewed yet, I'll add one more.

 src/conf/virinterfaceobj.c | 12 +++++++-----
 src/conf/virinterfaceobj.h |  2 +-
 src/test/test_driver.c     |  5 ++---
 3 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/conf/virinterfaceobj.c b/src/conf/virinterfaceobj.c
index 51c3c82..f7352d2 100644
--- a/src/conf/virinterfaceobj.c
+++ b/src/conf/virinterfaceobj.c
@@ -235,8 +235,10 @@ virInterfaceObjListClone(virInterfaceObjListPtr interfaces)
         }
 
         VIR_FREE(xml);
-        if (!(obj = virInterfaceObjListAssignDef(dest, backup)))
+        if (!(obj = virInterfaceObjListAssignDef(dest, &backup))) {
+            virInterfaceDefFree(backup);
             goto error;
+        }
         virInterfaceObjEndAPI(&obj);
     }
 
@@ -250,13 +252,13 @@ virInterfaceObjListClone(virInterfaceObjListPtr interfaces)
 
 virInterfaceObjPtr
 virInterfaceObjListAssignDef(virInterfaceObjListPtr interfaces,
-                             virInterfaceDefPtr def)
+                             virInterfaceDefPtr *def)
 {
     virInterfaceObjPtr obj;
 
-    if ((obj = virInterfaceObjListFindByName(interfaces, def->name))) {
+    if ((obj = virInterfaceObjListFindByName(interfaces, (*def)->name))) {
         virInterfaceDefFree(obj->def);
-        obj->def = def;
+        VIR_STEAL_PTR(obj->def, *def);
 
         return obj;
     }
@@ -270,7 +272,7 @@ virInterfaceObjListAssignDef(virInterfaceObjListPtr interfaces,
         return NULL;
     }
 
-    obj->def = def;
+    VIR_STEAL_PTR(obj->def, *def);
     return virObjectRef(obj);
 
 }
diff --git a/src/conf/virinterfaceobj.h b/src/conf/virinterfaceobj.h
index 2b9e1b2..0000ee9 100644
--- a/src/conf/virinterfaceobj.h
+++ b/src/conf/virinterfaceobj.h
@@ -65,7 +65,7 @@ virInterfaceObjListClone(virInterfaceObjListPtr interfaces);
 
 virInterfaceObjPtr
 virInterfaceObjListAssignDef(virInterfaceObjListPtr interfaces,
-                             virInterfaceDefPtr def);
+                             virInterfaceDefPtr *def);
 
 void
 virInterfaceObjListRemove(virInterfaceObjListPtr interfaces,
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index fb95319..4b4a782 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -1021,7 +1021,7 @@ testParseInterfaces(testDriverPtr privconn,
         if (!def)
             goto error;
 
-        if (!(obj = virInterfaceObjListAssignDef(privconn->ifaces, def))) {
+        if (!(obj = virInterfaceObjListAssignDef(privconn->ifaces, &def))) {
             virInterfaceDefFree(def);
             goto error;
         }
@@ -3903,9 +3903,8 @@ testInterfaceDefineXML(virConnectPtr conn,
     if (!(def = virInterfaceDefParseString(xmlStr)))
         goto cleanup;
 
-    if ((obj = virInterfaceObjListAssignDef(privconn->ifaces, def)) == NULL)
+    if (!(obj = virInterfaceObjListAssignDef(privconn->ifaces, &def)))
         goto cleanup;
-    def = NULL;
     objdef = virInterfaceObjGetDef(obj);
 
     ret = virGetInterface(conn, objdef->name, objdef->mac);
-- 
2.9.4




More information about the libvir-list mailing list