mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 17:35:17 +00:00
qemu: domain: Extract common clearing of VM private data
VM private data is cleared when the VM is turned off and also when the VM object is being freed. Some of the clearing code was duplicated. Extract it to a separate function. This also removes the now unnecessary function qemuDomainClearPrivatePaths.
This commit is contained in:
parent
f54f32740f
commit
3685e2dd64
@ -1684,16 +1684,6 @@ qemuDomainSetPrivatePaths(virQEMUDriverPtr driver,
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
qemuDomainClearPrivatePaths(virDomainObjPtr vm)
|
||||
{
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
|
||||
VIR_FREE(priv->libDir);
|
||||
VIR_FREE(priv->channelTargetDir);
|
||||
}
|
||||
|
||||
|
||||
static void *
|
||||
qemuDomainObjPrivateAlloc(void *opaque)
|
||||
{
|
||||
@ -1721,24 +1711,69 @@ qemuDomainObjPrivateAlloc(void *opaque)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* qemuDomainObjPrivateDataClear:
|
||||
* @priv: domain private data
|
||||
*
|
||||
* Clears private data entries, which are not necessary or stale if the VM is
|
||||
* not running.
|
||||
*/
|
||||
void
|
||||
qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr priv)
|
||||
{
|
||||
virStringListFree(priv->qemuDevices);
|
||||
priv->qemuDevices = NULL;
|
||||
|
||||
virCgroupFree(&priv->cgroup);
|
||||
|
||||
virPerfFree(priv->perf);
|
||||
priv->perf = NULL;
|
||||
|
||||
VIR_FREE(priv->machineName);
|
||||
|
||||
virObjectUnref(priv->qemuCaps);
|
||||
priv->qemuCaps = NULL;
|
||||
|
||||
VIR_FREE(priv->pidfile);
|
||||
|
||||
VIR_FREE(priv->libDir);
|
||||
VIR_FREE(priv->channelTargetDir);
|
||||
|
||||
/* remove automatic pinning data */
|
||||
virBitmapFree(priv->autoNodeset);
|
||||
priv->autoNodeset = NULL;
|
||||
virBitmapFree(priv->autoCpuset);
|
||||
priv->autoCpuset = NULL;
|
||||
|
||||
/* remove address data */
|
||||
virDomainPCIAddressSetFree(priv->pciaddrs);
|
||||
priv->pciaddrs = NULL;
|
||||
virDomainUSBAddressSetFree(priv->usbaddrs);
|
||||
priv->usbaddrs = NULL;
|
||||
|
||||
/* clean up migration data */
|
||||
VIR_FREE(priv->migTLSAlias);
|
||||
virCPUDefFree(priv->origCPU);
|
||||
priv->origCPU = NULL;
|
||||
|
||||
/* clear previously used namespaces */
|
||||
virBitmapFree(priv->namespaces);
|
||||
priv->namespaces = NULL;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
qemuDomainObjPrivateFree(void *data)
|
||||
{
|
||||
qemuDomainObjPrivatePtr priv = data;
|
||||
|
||||
virObjectUnref(priv->qemuCaps);
|
||||
qemuDomainObjPrivateDataClear(priv);
|
||||
|
||||
virBitmapFree(priv->namespaces);
|
||||
|
||||
virCgroupFree(&priv->cgroup);
|
||||
virDomainPCIAddressSetFree(priv->pciaddrs);
|
||||
virDomainUSBAddressSetFree(priv->usbaddrs);
|
||||
virDomainChrSourceDefFree(priv->monConfig);
|
||||
qemuDomainObjFreeJob(priv);
|
||||
VIR_FREE(priv->lockState);
|
||||
VIR_FREE(priv->origname);
|
||||
|
||||
virStringListFree(priv->qemuDevices);
|
||||
virChrdevFree(priv->devs);
|
||||
|
||||
/* This should never be non-NULL if we get here, but just in case... */
|
||||
@ -1751,19 +1786,10 @@ qemuDomainObjPrivateFree(void *data)
|
||||
qemuAgentClose(priv->agent);
|
||||
}
|
||||
VIR_FREE(priv->cleanupCallbacks);
|
||||
virBitmapFree(priv->autoNodeset);
|
||||
virBitmapFree(priv->autoCpuset);
|
||||
|
||||
VIR_FREE(priv->machineName);
|
||||
VIR_FREE(priv->libDir);
|
||||
VIR_FREE(priv->channelTargetDir);
|
||||
|
||||
qemuDomainSecretInfoFree(&priv->migSecinfo);
|
||||
VIR_FREE(priv->migTLSAlias);
|
||||
qemuDomainMasterKeyFree(priv);
|
||||
|
||||
virCPUDefFree(priv->origCPU);
|
||||
|
||||
VIR_FREE(priv);
|
||||
}
|
||||
|
||||
|
@ -676,6 +676,8 @@ void qemuDomainCleanupRemove(virDomainObjPtr vm,
|
||||
void qemuDomainCleanupRun(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm);
|
||||
|
||||
void qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr priv);
|
||||
|
||||
extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks;
|
||||
extern virDomainXMLNamespace virQEMUDriverDomainXMLNamespace;
|
||||
extern virDomainDefParserConfig virQEMUDriverDomainDefParserConfig;
|
||||
@ -783,8 +785,6 @@ int qemuDomainNetVLAN(virDomainNetDefPtr def);
|
||||
int qemuDomainSetPrivatePaths(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm);
|
||||
|
||||
void qemuDomainClearPrivatePaths(virDomainObjPtr vm);
|
||||
|
||||
virDomainDiskDefPtr qemuDomainDiskByName(virDomainDefPtr def, const char *name);
|
||||
|
||||
char *qemuDomainGetMasterKeyFilePath(const char *libDir);
|
||||
|
@ -6218,8 +6218,6 @@ void qemuProcessStop(virQEMUDriverPtr driver,
|
||||
virFileDeleteTree(priv->libDir);
|
||||
virFileDeleteTree(priv->channelTargetDir);
|
||||
|
||||
qemuDomainClearPrivatePaths(vm);
|
||||
|
||||
ignore_value(virDomainChrDefForeach(vm->def,
|
||||
false,
|
||||
qemuProcessCleanupChardevDevice,
|
||||
@ -6270,9 +6268,6 @@ void qemuProcessStop(virQEMUDriverPtr driver,
|
||||
VIR_FREE(vm->def->seclabels[i]->imagelabel);
|
||||
}
|
||||
|
||||
virStringListFree(priv->qemuDevices);
|
||||
priv->qemuDevices = NULL;
|
||||
|
||||
qemuHostdevReAttachDomainDevices(driver, vm->def);
|
||||
|
||||
def = vm->def;
|
||||
@ -6341,10 +6336,6 @@ void qemuProcessStop(virQEMUDriverPtr driver,
|
||||
VIR_WARN("Failed to remove cgroup for %s",
|
||||
vm->def->name);
|
||||
}
|
||||
virCgroupFree(&priv->cgroup);
|
||||
|
||||
virPerfFree(priv->perf);
|
||||
priv->perf = NULL;
|
||||
|
||||
qemuProcessRemoveDomainStatus(driver, vm);
|
||||
|
||||
@ -6398,37 +6389,14 @@ void qemuProcessStop(virQEMUDriverPtr driver,
|
||||
}
|
||||
}
|
||||
|
||||
VIR_FREE(priv->machineName);
|
||||
|
||||
vm->taint = 0;
|
||||
vm->pid = -1;
|
||||
virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, reason);
|
||||
for (i = 0; i < vm->def->niothreadids; i++)
|
||||
vm->def->iothreadids[i]->thread_id = 0;
|
||||
virObjectUnref(priv->qemuCaps);
|
||||
priv->qemuCaps = NULL;
|
||||
VIR_FREE(priv->pidfile);
|
||||
|
||||
/* remove automatic pinning data */
|
||||
virBitmapFree(priv->autoNodeset);
|
||||
priv->autoNodeset = NULL;
|
||||
virBitmapFree(priv->autoCpuset);
|
||||
priv->autoCpuset = NULL;
|
||||
|
||||
/* remove address data */
|
||||
virDomainPCIAddressSetFree(priv->pciaddrs);
|
||||
priv->pciaddrs = NULL;
|
||||
virDomainUSBAddressSetFree(priv->usbaddrs);
|
||||
priv->usbaddrs = NULL;
|
||||
|
||||
/* clean up migration data */
|
||||
VIR_FREE(priv->migTLSAlias);
|
||||
virCPUDefFree(priv->origCPU);
|
||||
priv->origCPU = NULL;
|
||||
|
||||
/* clear previously used namespaces */
|
||||
virBitmapFree(priv->namespaces);
|
||||
priv->namespaces = NULL;
|
||||
/* clear all private data entries which are no longer needed */
|
||||
qemuDomainObjPrivateDataClear(priv);
|
||||
|
||||
/* The "release" hook cleans up additional resources */
|
||||
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user