From: John Ferlan Date: Mon, 26 Mar 2018 23:14:30 +0000 (-0400) Subject: conf: Fix error path logic in virDomainObjListLoadStatus X-Git-Tag: v4.3.0-rc1~409 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e0f7707cd54277ea9c1492e148c18fb4ca5d6aef;p=thirdparty%2Flibvirt.git conf: Fix error path logic in virDomainObjListLoadStatus If the virHashAddEntry fails, then we need to "careful" about how we free the @obj. When virDomainObjParseFile returns there is one reference and the object is locked, so use virDomainObjEndAPI when done. Add a virObjectRef in the error path for the second virHashAddEntry call since it doesn't call virObjectRef, but virHashRemoveEntry will call virObjectUnref because virObjectFreeHashData is called when the element is removed from the hash table as set up in virDomainObjListNew. Signed-off-by: John Ferlan --- diff --git a/src/conf/virdomainobjlist.c b/src/conf/virdomainobjlist.c index aa7966e364..259657918c 100644 --- a/src/conf/virdomainobjlist.c +++ b/src/conf/virdomainobjlist.c @@ -536,6 +536,7 @@ virDomainObjListLoadStatus(virDomainObjListPtr doms, goto error; if (virHashAddEntry(doms->objsName, obj->def->name, obj) < 0) { + virObjectRef(obj); virHashRemoveEntry(doms->objs, uuidstr); goto error; } @@ -551,7 +552,7 @@ virDomainObjListLoadStatus(virDomainObjListPtr doms, return obj; error: - virObjectUnref(obj); + virDomainObjEndAPI(&obj); VIR_FREE(statusFile); return NULL; }