mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-04-01 20:05:19 +00:00
qemu: remove virConnectPtr from some more startup code paths
There's a few places in startup code paths which pass around a virConnectPtr which is no longer required. Specifically, the qemuProcessStart() method now only requires a non-NULL connection if autodestroy is requested. Reviewed-by: John Ferlan <jferlan@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
6678a44777
commit
a967615c4b
@ -181,12 +181,6 @@ static virNWFilterCallbackDriver qemuCallbackDriver = {
|
||||
};
|
||||
|
||||
|
||||
struct qemuAutostartData {
|
||||
virQEMUDriverPtr driver;
|
||||
virConnectPtr conn;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* qemuDomObjFromDomain:
|
||||
* @domain: Domain pointer that has to be looked up
|
||||
@ -254,9 +248,9 @@ static int
|
||||
qemuAutostartDomain(virDomainObjPtr vm,
|
||||
void *opaque)
|
||||
{
|
||||
struct qemuAutostartData *data = opaque;
|
||||
virQEMUDriverPtr driver = opaque;
|
||||
int flags = 0;
|
||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(data->driver);
|
||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||
int ret = -1;
|
||||
|
||||
if (cfg->autoStartBypassCache)
|
||||
@ -267,7 +261,7 @@ qemuAutostartDomain(virDomainObjPtr vm,
|
||||
virResetLastError();
|
||||
if (vm->autostart &&
|
||||
!virDomainObjIsActive(vm)) {
|
||||
if (qemuProcessBeginJob(data->driver, vm,
|
||||
if (qemuProcessBeginJob(driver, vm,
|
||||
VIR_DOMAIN_JOB_OPERATION_START) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to start job on VM '%s': %s"),
|
||||
@ -275,14 +269,14 @@ qemuAutostartDomain(virDomainObjPtr vm,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (qemuDomainObjStart(data->conn, data->driver, vm, flags,
|
||||
if (qemuDomainObjStart(NULL, driver, vm, flags,
|
||||
QEMU_ASYNC_JOB_START) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to autostart VM '%s': %s"),
|
||||
vm->def->name, virGetLastErrorMessage());
|
||||
}
|
||||
|
||||
qemuProcessEndJob(data->driver, vm);
|
||||
qemuProcessEndJob(driver, vm);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
@ -296,20 +290,7 @@ qemuAutostartDomain(virDomainObjPtr vm,
|
||||
static void
|
||||
qemuAutostartDomains(virQEMUDriverPtr driver)
|
||||
{
|
||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||
/* XXX: Figure out a better way todo this. The domain
|
||||
* startup code needs a connection handle in order
|
||||
* to lookup the bridge associated with a virtual
|
||||
* network
|
||||
*/
|
||||
virConnectPtr conn = virConnectOpen(cfg->uri);
|
||||
/* Ignoring NULL conn which is mostly harmless here */
|
||||
struct qemuAutostartData data = { driver, conn };
|
||||
|
||||
virDomainObjListForEach(driver->domains, qemuAutostartDomain, &data);
|
||||
|
||||
virObjectUnref(conn);
|
||||
virObjectUnref(cfg);
|
||||
virDomainObjListForEach(driver->domains, qemuAutostartDomain, driver);
|
||||
}
|
||||
|
||||
|
||||
@ -623,7 +604,6 @@ qemuStateInitialize(bool privileged,
|
||||
void *opaque)
|
||||
{
|
||||
char *driverConf = NULL;
|
||||
virConnectPtr conn = NULL;
|
||||
virQEMUDriverConfigPtr cfg;
|
||||
uid_t run_uid = -1;
|
||||
gid_t run_gid = -1;
|
||||
@ -933,8 +913,6 @@ qemuStateInitialize(bool privileged,
|
||||
qemuDomainNetsRestart,
|
||||
NULL);
|
||||
|
||||
conn = virConnectOpen(cfg->uri);
|
||||
|
||||
/* Then inactive persistent configs */
|
||||
if (virDomainObjListLoadAllConfigs(qemu_driver->domains,
|
||||
cfg->configDir,
|
||||
@ -952,19 +930,16 @@ qemuStateInitialize(bool privileged,
|
||||
qemuDomainManagedSaveLoad,
|
||||
qemu_driver);
|
||||
|
||||
qemuProcessReconnectAll(conn, qemu_driver);
|
||||
qemuProcessReconnectAll(qemu_driver);
|
||||
|
||||
qemu_driver->workerPool = virThreadPoolNew(0, 1, 0, qemuProcessEventHandler, qemu_driver);
|
||||
if (!qemu_driver->workerPool)
|
||||
goto error;
|
||||
|
||||
virObjectUnref(conn);
|
||||
|
||||
virNWFilterRegisterCallbackDriver(&qemuCallbackDriver);
|
||||
return 0;
|
||||
|
||||
error:
|
||||
virObjectUnref(conn);
|
||||
VIR_FREE(driverConf);
|
||||
VIR_FREE(hugepagePath);
|
||||
VIR_FREE(memoryBackingPath);
|
||||
|
@ -2749,7 +2749,6 @@ qemuProcessUpdateVideoRamSize(virQEMUDriverPtr driver,
|
||||
|
||||
|
||||
struct qemuProcessHookData {
|
||||
virConnectPtr conn;
|
||||
virDomainObjPtr vm;
|
||||
virQEMUDriverPtr driver;
|
||||
virQEMUDriverConfigPtr cfg;
|
||||
@ -5937,7 +5936,12 @@ qemuProcessLaunch(virConnectPtr conn,
|
||||
|
||||
cfg = virQEMUDriverGetConfig(driver);
|
||||
|
||||
hookData.conn = conn;
|
||||
if ((flags & VIR_QEMU_PROCESS_START_AUTODESTROY) && !conn) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("Domain autodestroy requires a connection handle"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
hookData.vm = vm;
|
||||
hookData.driver = driver;
|
||||
/* We don't increase cfg's reference counter here. */
|
||||
@ -7246,7 +7250,6 @@ qemuProcessRefreshCPU(virQEMUDriverPtr driver,
|
||||
|
||||
|
||||
struct qemuProcessReconnectData {
|
||||
virConnectPtr conn;
|
||||
virQEMUDriverPtr driver;
|
||||
virDomainObjPtr obj;
|
||||
};
|
||||
@ -7254,10 +7257,6 @@ struct qemuProcessReconnectData {
|
||||
* Open an existing VM's monitor, re-detect VCPU threads
|
||||
* and re-reserve the security labels in use
|
||||
*
|
||||
* We own the virConnectPtr we are passed here - whoever started
|
||||
* this thread function has increased the reference counter to it
|
||||
* so that we now have to close it.
|
||||
*
|
||||
* This function also inherits a locked and ref'd domain object.
|
||||
*
|
||||
* This function needs to:
|
||||
@ -7279,7 +7278,6 @@ qemuProcessReconnect(void *opaque)
|
||||
virQEMUDriverPtr driver = data->driver;
|
||||
virDomainObjPtr obj = data->obj;
|
||||
qemuDomainObjPrivatePtr priv;
|
||||
virConnectPtr conn = data->conn;
|
||||
struct qemuDomainJobObj oldjob;
|
||||
int state;
|
||||
int reason;
|
||||
@ -7501,7 +7499,6 @@ qemuProcessReconnect(void *opaque)
|
||||
qemuDomainRemoveInactiveJob(driver, obj);
|
||||
}
|
||||
virDomainObjEndAPI(&obj);
|
||||
virObjectUnref(conn);
|
||||
virObjectUnref(cfg);
|
||||
virObjectUnref(caps);
|
||||
virNWFilterUnlockFilterUpdates();
|
||||
@ -7557,12 +7554,6 @@ qemuProcessReconnectHelper(virDomainObjPtr obj,
|
||||
virObjectLock(obj);
|
||||
virObjectRef(obj);
|
||||
|
||||
/* Since we close the connection later on, we have to make sure that the
|
||||
* threads we start see a valid connection throughout their lifetime. We
|
||||
* simply increase the reference counter here.
|
||||
*/
|
||||
virObjectRef(data->conn);
|
||||
|
||||
if (virThreadCreate(&thread, false, qemuProcessReconnect, data) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("Could not create thread. QEMU initialization "
|
||||
@ -7578,7 +7569,6 @@ qemuProcessReconnectHelper(virDomainObjPtr obj,
|
||||
|
||||
virDomainObjEndAPI(&obj);
|
||||
virNWFilterUnlockFilterUpdates();
|
||||
virObjectUnref(data->conn);
|
||||
VIR_FREE(data);
|
||||
return -1;
|
||||
}
|
||||
@ -7593,8 +7583,8 @@ qemuProcessReconnectHelper(virDomainObjPtr obj,
|
||||
* about.
|
||||
*/
|
||||
void
|
||||
qemuProcessReconnectAll(virConnectPtr conn, virQEMUDriverPtr driver)
|
||||
qemuProcessReconnectAll(virQEMUDriverPtr driver)
|
||||
{
|
||||
struct qemuProcessReconnectData data = {.conn = conn, .driver = driver};
|
||||
struct qemuProcessReconnectData data = {.driver = driver};
|
||||
virDomainObjListForEach(driver->domains, qemuProcessReconnectHelper, &data);
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ int qemuProcessDestroyMemoryBackingPath(virQEMUDriverPtr driver,
|
||||
virDomainMemoryDefPtr mem);
|
||||
|
||||
void qemuProcessAutostartAll(virQEMUDriverPtr driver);
|
||||
void qemuProcessReconnectAll(virConnectPtr conn, virQEMUDriverPtr driver);
|
||||
void qemuProcessReconnectAll(virQEMUDriverPtr driver);
|
||||
|
||||
typedef struct _qemuProcessIncomingDef qemuProcessIncomingDef;
|
||||
typedef qemuProcessIncomingDef *qemuProcessIncomingDefPtr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user