1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

qemu_conf: Use automatic memory management

Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Tim Wiederhake 2022-03-08 15:59:06 +01:00
parent d115fe8d11
commit 4a46539d0a

View File

@ -85,17 +85,6 @@ static int virQEMUConfigOnceInit(void)
VIR_ONCE_GLOBAL_INIT(virQEMUConfig); VIR_ONCE_GLOBAL_INIT(virQEMUConfig);
static void
qemuDriverLock(virQEMUDriver *driver)
{
virMutexLock(&driver->lock);
}
static void
qemuDriverUnlock(virQEMUDriver *driver)
{
virMutexUnlock(&driver->lock);
}
#ifndef DEFAULT_LOADER_NVRAM #ifndef DEFAULT_LOADER_NVRAM
# define DEFAULT_LOADER_NVRAM \ # define DEFAULT_LOADER_NVRAM \
"/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd:" \ "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd:" \
@ -1279,11 +1268,9 @@ virQEMUDriverConfigSetDefaults(virQEMUDriverConfig *cfg)
virQEMUDriverConfig *virQEMUDriverGetConfig(virQEMUDriver *driver) virQEMUDriverConfig *virQEMUDriverGetConfig(virQEMUDriver *driver)
{ {
virQEMUDriverConfig *conf; VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock);
qemuDriverLock(driver);
conf = virObjectRef(driver->config); return virObjectRef(driver->config);
qemuDriverUnlock(driver);
return conf;
} }
virDomainXMLOption * virDomainXMLOption *
@ -1303,16 +1290,13 @@ virQEMUDriverCreateXMLConf(virQEMUDriver *driver,
virCPUDef * virCPUDef *
virQEMUDriverGetHostCPU(virQEMUDriver *driver) virQEMUDriverGetHostCPU(virQEMUDriver *driver)
{ {
virCPUDef *hostcpu; virCPUDef *hostcpu = NULL;
qemuDriverLock(driver); VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) {
if (!driver->hostcpu)
if (!driver->hostcpu) driver->hostcpu = virCPUProbeHost(virArchFromHost());
driver->hostcpu = virCPUProbeHost(virArchFromHost()); hostcpu = driver->hostcpu;
}
hostcpu = driver->hostcpu;
qemuDriverUnlock(driver);
if (hostcpu) if (hostcpu)
virCPUDefRef(hostcpu); virCPUDefRef(hostcpu);
@ -1389,32 +1373,27 @@ virCaps *virQEMUDriverCreateCapabilities(virQEMUDriver *driver)
* Returns: a reference to a virCaps *instance or NULL * Returns: a reference to a virCaps *instance or NULL
*/ */
virCaps *virQEMUDriverGetCapabilities(virQEMUDriver *driver, virCaps *virQEMUDriverGetCapabilities(virQEMUDriver *driver,
bool refresh) bool refresh)
{ {
virCaps *ret = NULL;
if (refresh) { if (refresh) {
virCaps *caps = NULL; virCaps *caps = NULL;
if ((caps = virQEMUDriverCreateCapabilities(driver)) == NULL) if ((caps = virQEMUDriverCreateCapabilities(driver)) == NULL)
return NULL; return NULL;
qemuDriverLock(driver); VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) {
virObjectUnref(driver->caps); virObjectUnref(driver->caps);
driver->caps = caps; driver->caps = caps;
} else { return virObjectRef(driver->caps);
qemuDriverLock(driver);
if (driver->caps == NULL ||
driver->caps->nguests == 0) {
VIR_DEBUG("Capabilities didn't detect any guests. Forcing a "
"refresh.");
qemuDriverUnlock(driver);
return virQEMUDriverGetCapabilities(driver, true);
} }
} }
ret = virObjectRef(driver->caps); VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) {
qemuDriverUnlock(driver); if (driver->caps && driver->caps->nguests > 0)
return ret; return virObjectRef(driver->caps);
}
VIR_DEBUG("Capabilities didn't detect any guests. Forcing a refresh.");
return virQEMUDriverGetCapabilities(driver, true);
} }