diff --git a/src/conf/virnwfilterbindingobj.c b/src/conf/virnwfilterbindingobj.c index 23978d4207..68afb9c434 100644 --- a/src/conf/virnwfilterbindingobj.c +++ b/src/conf/virnwfilterbindingobj.c @@ -88,6 +88,16 @@ virNWFilterBindingObjSetDef(virNWFilterBindingObjPtr obj, } +virNWFilterBindingDefPtr +virNWFilterBindingObjStealDef(virNWFilterBindingObjPtr obj) +{ + virNWFilterBindingDefPtr def; + + VIR_STEAL_PTR(def, obj->def); + return def; +} + + bool virNWFilterBindingObjGetRemoving(virNWFilterBindingObjPtr obj) { diff --git a/src/conf/virnwfilterbindingobj.h b/src/conf/virnwfilterbindingobj.h index 8e5fbee35f..b26bb3c8ec 100644 --- a/src/conf/virnwfilterbindingobj.h +++ b/src/conf/virnwfilterbindingobj.h @@ -39,6 +39,9 @@ void virNWFilterBindingObjSetDef(virNWFilterBindingObjPtr obj, virNWFilterBindingDefPtr def); +virNWFilterBindingDefPtr +virNWFilterBindingObjStealDef(virNWFilterBindingObjPtr obj); + bool virNWFilterBindingObjGetRemoving(virNWFilterBindingObjPtr obj); diff --git a/src/conf/virnwfilterbindingobjlist.c b/src/conf/virnwfilterbindingobjlist.c index 06ccbf53af..4ee2c1b194 100644 --- a/src/conf/virnwfilterbindingobjlist.c +++ b/src/conf/virnwfilterbindingobjlist.c @@ -167,6 +167,7 @@ virNWFilterBindingObjListAddLocked(virNWFilterBindingObjListPtr bindings, virNWFilterBindingDefPtr def) { virNWFilterBindingObjPtr binding; + bool stealDef = false; /* See if a binding with matching portdev already exists */ if ((binding = virNWFilterBindingObjListFindByPortDevLocked( @@ -181,6 +182,7 @@ virNWFilterBindingObjListAddLocked(virNWFilterBindingObjListPtr bindings, goto error; virNWFilterBindingObjSetDef(binding, def); + stealDef = true; if (virNWFilterBindingObjListAddObjLocked(bindings, binding) < 0) goto error; @@ -188,6 +190,8 @@ virNWFilterBindingObjListAddLocked(virNWFilterBindingObjListPtr bindings, return binding; error: + if (stealDef) + virNWFilterBindingObjStealDef(binding); virNWFilterBindingObjEndAPI(&binding); return NULL; } diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 26f10bd47f..a33f9e61b1 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1101,6 +1101,7 @@ virNWFilterBindingObjParseFile; virNWFilterBindingObjSave; virNWFilterBindingObjSetDef; virNWFilterBindingObjSetRemoving; +virNWFilterBindingObjStealDef; # conf/virnwfilterbindingobjlist.h