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);
@ -1391,30 +1375,25 @@ virCaps *virQEMUDriverCreateCapabilities(virQEMUDriver *driver)
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 || VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) {
driver->caps->nguests == 0) { if (driver->caps && driver->caps->nguests > 0)
VIR_DEBUG("Capabilities didn't detect any guests. Forcing a " return virObjectRef(driver->caps);
"refresh."); }
qemuDriverUnlock(driver);
VIR_DEBUG("Capabilities didn't detect any guests. Forcing a refresh.");
return virQEMUDriverGetCapabilities(driver, true); return virQEMUDriverGetCapabilities(driver, true);
}
}
ret = virObjectRef(driver->caps);
qemuDriverUnlock(driver);
return ret;
} }