};
-struct qemuAutostartData {
- virQEMUDriverPtr driver;
- virConnectPtr conn;
-};
-
-
/**
* qemuDomObjFromDomain:
* @domain: Domain pointer that has to be looked up
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)
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"),
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;
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);
}
void *opaque)
{
char *driverConf = NULL;
- virConnectPtr conn = NULL;
virQEMUDriverConfigPtr cfg;
uid_t run_uid = -1;
gid_t run_gid = -1;
qemuDomainNetsRestart,
NULL);
- conn = virConnectOpen(cfg->uri);
-
/* Then inactive persistent configs */
if (virDomainObjListLoadAllConfigs(qemu_driver->domains,
cfg->configDir,
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);
struct qemuProcessHookData {
- virConnectPtr conn;
virDomainObjPtr vm;
virQEMUDriverPtr driver;
virQEMUDriverConfigPtr cfg;
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. */
struct qemuProcessReconnectData {
- virConnectPtr conn;
virQEMUDriverPtr driver;
virDomainObjPtr obj;
};
* 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:
virQEMUDriverPtr driver = data->driver;
virDomainObjPtr obj = data->obj;
qemuDomainObjPrivatePtr priv;
- virConnectPtr conn = data->conn;
struct qemuDomainJobObj oldjob;
int state;
int reason;
qemuDomainRemoveInactiveJob(driver, obj);
}
virDomainObjEndAPI(&obj);
- virObjectUnref(conn);
virObjectUnref(cfg);
virObjectUnref(caps);
virNWFilterUnlockFilterUpdates();
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 "
virDomainObjEndAPI(&obj);
virNWFilterUnlockFilterUpdates();
- virObjectUnref(data->conn);
VIR_FREE(data);
return -1;
}
* 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);
}