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(a)redhat.com>
---
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