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@xxxxxxxxxx> --- src/bhyve/bhyve_driver.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index 6ef9d98..a5b349a 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -135,22 +135,24 @@ bhyveConnectGetCapabilities(virConnectPtr conn) { 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; } -- 1.9.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list