]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
bhyveConnectGetCapabilities: Fix double caps unref
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 7 Apr 2014 15:29:18 +0000 (17:29 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 8 Apr 2014 07:17:01 +0000 (09:17 +0200)
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>
src/bhyve/bhyve_driver.c

index 6ef9d986569cced2ae39e0d14880674d6ab2b657..a5b349a862e54a85a00262e022d3b4867d70c4be 100644 (file)
@@ -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;
 }