At the beginning of the function we gain a reference to the driver
capabilities. Then, we call format function (*) which if failed, unref
over caps is called. Then, at the end another unref occurs.
* - Moreover, the format was not called over gained caps, but over
privconn->caps directly which is not allowed anymore.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
{
bhyveConnPtr privconn = conn->privateData;
virCapsPtr caps;
- char *xml;
+ char *xml = NULL;
if (virConnectGetCapabilitiesEnsureACL(conn) < 0)
return NULL;
- caps = bhyveDriverGetCapabilities(privconn);
- if (!caps)
+ if (!(caps = bhyveDriverGetCapabilities(privconn))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Unable to get Capabilities"));
+ goto cleanup;
+ }
- if ((xml = virCapabilitiesFormatXML(privconn->caps)) == NULL) {
- virObjectUnref(caps);
+ if (!(xml = virCapabilitiesFormatXML(caps))) {
virReportOOMError();
+ goto cleanup;
}
- virObjectUnref(caps);
+ cleanup:
+ virObjectUnref(caps);
return xml;
}