VIR_ENUM_IMPL(virCapsHostPMTarget, VIR_NODE_SUSPEND_TARGET_LAST,
"suspend_mem", "suspend_disk", "suspend_hybrid");
+static virClassPtr virCapsClass;
+static void virCapabilitiesDispose(void *obj);
+
+static int virCapabilitiesOnceInit(void)
+{
+ if (!(virCapsClass = virClassNew(virClassForObject(),
+ "virCaps",
+ sizeof(virCaps),
+ virCapabilitiesDispose)))
+ return -1;
+
+ return 0;
+}
+
+VIR_ONCE_GLOBAL_INIT(virCapabilities)
+
/**
* virCapabilitiesNew:
* @hostarch: host machine architecture
{
virCapsPtr caps;
- if (VIR_ALLOC(caps) < 0)
+ if (virCapabilitiesInitialize() < 0)
+ return NULL;
+
+ if (!(caps = virObjectNew(virCapsClass)))
return NULL;
caps->host.arch = hostarch;
caps->host.nnumaCell = 0;
}
-/**
- * virCapabilitiesFree:
- * @caps: object to free
- *
- * Free all memory associated with capabilities
- */
-void
-virCapabilitiesFree(virCapsPtr caps) {
+static void
+virCapabilitiesDispose(void *object)
+{
+ virCapsPtr caps = object;
int i;
- if (caps == NULL)
- return;
for (i = 0 ; i < caps->nguests ; i++)
virCapabilitiesFreeGuest(caps->guests[i]);
VIR_FREE(caps->host.secModels);
virCPUDefFree(caps->host.cpu);
-
- VIR_FREE(caps);
}
# include "cpu_conf.h"
# include "virarch.h"
# include "virmacaddr.h"
+# include "virobject.h"
# include <libxml/xpath.h>
typedef struct _virCaps virCaps;
typedef virCaps* virCapsPtr;
struct _virCaps {
+ virObject parent;
+
virCapsHost host;
size_t nguests;
size_t nguests_max;
int offlineMigrate,
int liveMigrate);
-extern void
-virCapabilitiesFree(virCapsPtr caps);
-
extern void
virCapabilitiesFreeNUMAInfo(virCapsPtr caps);
esxVI_Context_Free(&(*priv)->host);
esxVI_Context_Free(&(*priv)->vCenter);
esxUtil_FreeParsedUri(&(*priv)->parsedUri);
- virCapabilitiesFree((*priv)->caps);
+ virObjectUnref((*priv)->caps);
VIR_FREE(*priv);
}
return caps;
failure:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
virCapabilitiesDefaultGuestEmulator;
virCapabilitiesDefaultGuestMachine;
virCapabilitiesFormatXML;
-virCapabilitiesFree;
virCapabilitiesFreeMachines;
virCapabilitiesFreeNUMAInfo;
virCapabilitiesGenerateMac;
return caps;
no_memory:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
no_memory:
virReportOOMError();
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
return -1;
libxlDriverLock(libxl_driver);
- virCapabilitiesFree(libxl_driver->caps);
+ virObjectUnref(libxl_driver->caps);
virObjectUnref(libxl_driver->domains);
libxl_ctx_free(libxl_driver->ctx);
xtl_logger_destroy(libxl_driver->logger);
virReportOOMError();
error:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
cleanup:
VIR_FREE(configFile);
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return ctrl;
no_memory:
virLXCProcessAutoDestroyShutdown(lxc_driver);
- virCapabilitiesFree(lxc_driver->caps);
+ virObjectUnref(lxc_driver->caps);
virSecurityManagerFree(lxc_driver->securityManager);
VIR_FREE(lxc_driver->configDir);
VIR_FREE(lxc_driver->autostartDir);
return caps;
no_memory:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
return;
virObjectUnref(driver->domains);
- virCapabilitiesFree(driver->caps);
+ virObjectUnref(driver->caps);
VIR_FREE(driver);
}
no_memory:
virReportOOMError();
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
error:
virObjectUnref(privconn->domains);
- virCapabilitiesFree(privconn->caps);
+ virObjectUnref(privconn->caps);
virStoragePoolObjListFree(&privconn->pools);
VIR_FREE(privconn);
return VIR_DRV_OPEN_ERROR;
parallelsConnPtr privconn = conn->privateData;
parallelsDriverLock(privconn);
- virCapabilitiesFree(privconn->caps);
+ virObjectUnref(privconn->caps);
virObjectUnref(privconn->domains);
conn->privateData = NULL;
return caps;
no_memory:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
failure:
if (phyp_driver != NULL) {
- virCapabilitiesFree(phyp_driver->caps);
+ virObjectUnref(phyp_driver->caps);
VIR_FREE(phyp_driver->managed_system);
VIR_FREE(phyp_driver);
}
libssh2_session_disconnect(session, "Disconnecting...");
libssh2_session_free(session);
- virCapabilitiesFree(phyp_driver->caps);
+ virObjectUnref(phyp_driver->caps);
phypUUIDTable_Free(phyp_driver->uuid_table);
VIR_FREE(phyp_driver->managed_system);
VIR_FREE(phyp_driver);
return caps;
error:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
virReportOOMError();
err_exit:
VIR_FREE(sec_managers);
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
virObjectUnref(cfg);
return NULL;
}
virObjectUnref(qemu_driver->inactivePciHostdevs);
virObjectUnref(qemu_driver->activeUsbHostdevs);
virHashFree(qemu_driver->sharedDisks);
- virCapabilitiesFree(qemu_driver->caps);
+ virObjectUnref(qemu_driver->caps);
qemuCapsCacheFree(qemu_driver->capsCache);
virObjectUnref(qemu_driver->domains);
qemuDriverLock(driver);
- if ((caps = qemuCreateCapabilities(qemu_driver)) == NULL) {
- virCapabilitiesFree(caps);
+ if ((caps = qemuCreateCapabilities(qemu_driver)) == NULL)
goto cleanup;
- }
- virCapabilitiesFree(qemu_driver->caps);
+ virObjectUnref(qemu_driver->caps);
qemu_driver->caps = caps;
if ((xml = virCapabilitiesFormatXML(driver->caps)) == NULL)
return -1;
VIR_FREE(ctl->def);
- virCapabilitiesFree(ctl->caps);
+ virObjectUnref(ctl->caps);
VIR_FREE(ctl->files);
VIR_FREE(ctl->hvm);
VIR_FREE(ctl->newfile);
no_memory:
virReportOOMError();
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
virInterfaceObjListFree(&privconn->ifaces);
virStoragePoolObjListFree(&privconn->pools);
virNodeDeviceObjListFree(&privconn->devs);
- virCapabilitiesFree(privconn->caps);
+ virObjectUnref(privconn->caps);
testDriverUnlock(privconn);
conn->privateData = NULL;
VIR_FREE(privconn);
{
testConnPtr privconn = conn->privateData;
testDriverLock(privconn);
- virCapabilitiesFree(privconn->caps);
+ virObjectUnref(privconn->caps);
virObjectUnref(privconn->domains);
virNodeDeviceObjListFree(&privconn->devs);
virNetworkObjListFree(&privconn->networks);
return caps;
error:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
if (uml_driver->inotifyWatch != -1)
virEventRemoveHandle(uml_driver->inotifyWatch);
VIR_FORCE_CLOSE(uml_driver->inotifyFD);
- virCapabilitiesFree(uml_driver->caps);
+ virObjectUnref(uml_driver->caps);
/* shutdown active VMs
* XXX allow them to stay around & reconnect */
return caps;
no_memory:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
if (data->pFuncs)
data->pFuncs->pfnComUninitialize();
- virCapabilitiesFree(data->caps);
+ virObjectUnref(data->caps);
#if VBOX_API_VERSION == 2002
/* No domainEventCallbacks in 2.2.* version */
#else /* !(VBOX_API_VERSION == 2002) */
virMutexDestroy(&driver->lock);
virObjectUnref(driver->domains);
- virCapabilitiesFree(driver->caps);
+ virObjectUnref(driver->caps);
VIR_FREE(driver);
}
return caps;
error:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
goto cleanup;
}
GET_PRIVATE(conn);
int i;
- virCapabilitiesFree(priv->caps);
+ virObjectUnref(priv->caps);
virDomainEventStateFree(priv->domainEvents);
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
if (hv_versions.sys_interface >= SYS_IFACE_MIN_VERS_NUMA && conn != NULL) {
if (xenDaemonNodeGetTopology(conn, caps) != 0) {
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
}
return caps;
no_memory:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
no_memory:
virReportOOMError();
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
return caps;
error_cleanup:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
VIR_FREE(password);
if (privP != NULL) {
- virCapabilitiesFree(privP->caps);
+ virObjectUnref(privP->caps);
if (privP->session != NULL)
xenSessionFree(privP->session);
{
struct _xenapiPrivate *priv = conn->privateData;
- virCapabilitiesFree(priv->caps);
+ virObjectUnref(priv->caps);
if (priv->session != NULL) {
xen_session_logout(priv->session);
DO_TEST("metadata", "c7a5fdbd-edaf-9455-926a-d65c16db1809", 0);
DO_TEST("external_vm", "c7a5fdbd-edaf-9455-926a-d65c16db1809", 0);
- virCapabilitiesFree(driver.caps);
+ virObjectUnref(driver.caps);
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
DO_TEST("systemd");
DO_TEST("hostdev");
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
DO_TEST_FULL("qemu-ns-no-env", 1, NULL);
virObjectUnref(driver.config);
- virCapabilitiesFree(driver.caps);
+ virObjectUnref(driver.caps);
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
DO_TEST(GetCPUDefinitions);
DO_TEST(GetCommands);
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
}
QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_QXL_VGA);
virObjectUnref(driver.config);
- virCapabilitiesFree(driver.caps);
+ virObjectUnref(driver.caps);
VIR_FREE(map);
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
DO_TEST_DIFFERENT("metadata");
- virCapabilitiesFree(driver.caps);
+ virObjectUnref(driver.caps);
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
DO_TEST("qemu-ns-commandline-ns1", false, NONE);
virObjectUnref(driver.config);
- virCapabilitiesFree(driver.caps);
+ virObjectUnref(driver.caps);
VIR_FREE(map);
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
DO_TEST("boot-grub", "boot-grub", 1);
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
return caps;
error:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
#endif
cleanup:
virCapabilitiesFreeMachines(machines, nmachines);
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
#endif
cleanup:
virCapabilitiesFreeMachines(machines, nmachines);
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return NULL;
}
return;
failure:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
caps = NULL;
}
DO_TEST("svga", "svga");
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
VIR_FORCE_FCLOSE(fp1);
VIR_FORCE_FCLOSE(fp2);
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return ret;
}
DO_TEST("no-source-cdrom", 2);
DO_TEST("pci-devs", 2);
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
DO_TEST("boot-grub", "boot-grub", "fvtest", 1);
DO_TEST("escape", "escape", "fvtest", 1);
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
return;
failure:
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
caps = NULL;
}
DO_TEST("svga", "svga", 4);
- virCapabilitiesFree(caps);
+ virObjectUnref(caps);
return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}