From ed0507b58a2f69affef3aefed465fd9521f70bb0 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 28 Jun 2022 16:30:34 +0200 Subject: [PATCH] virLXCProcessStart: Pass in virConnect object only when registering autodestroy The function doesn't really need the connect object for anything besides registering the autodestroy callback for it. If we merge it certain callers can be simplified. Signed-off-by: Peter Krempa Reviewed-by: Tim Wiederhake --- src/lxc/lxc_driver.c | 15 +++++++++------ src/lxc/lxc_process.c | 31 ++++++++++--------------------- src/lxc/lxc_process.h | 5 ++--- 3 files changed, 21 insertions(+), 30 deletions(-) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 456d2fbae9..6b2f721178 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -964,9 +964,13 @@ static int lxcDomainCreateWithFiles(virDomainPtr dom, virObjectEvent *event = NULL; int ret = -1; g_autoptr(virLXCDriverConfig) cfg = virLXCDriverGetConfig(driver); + virConnect *autoDestroyConn = NULL; virCheckFlags(VIR_DOMAIN_START_AUTODESTROY, -1); + if (flags & VIR_DOMAIN_START_AUTODESTROY) + autoDestroyConn = dom->conn; + if (!(vm = lxcDomObjFromDomain(dom))) goto cleanup; @@ -988,9 +992,7 @@ static int lxcDomainCreateWithFiles(virDomainPtr dom, goto endjob; } - ret = virLXCProcessStart(dom->conn, driver, vm, - nfiles, files, - (flags & VIR_DOMAIN_START_AUTODESTROY), + ret = virLXCProcessStart(driver, vm, nfiles, files, autoDestroyConn, VIR_DOMAIN_RUNNING_BOOTED); if (ret == 0) { @@ -1065,10 +1067,13 @@ lxcDomainCreateXMLWithFiles(virConnectPtr conn, g_autoptr(virLXCDriverConfig) cfg = virLXCDriverGetConfig(driver); g_autoptr(virCaps) caps = NULL; unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE; + virConnect *autoDestroyConn = NULL; virCheckFlags(VIR_DOMAIN_START_AUTODESTROY | VIR_DOMAIN_START_VALIDATE, NULL); + if (flags & VIR_DOMAIN_START_AUTODESTROY) + autoDestroyConn = conn; if (flags & VIR_DOMAIN_START_VALIDATE) parse_flags |= VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA; @@ -1106,9 +1111,7 @@ lxcDomainCreateXMLWithFiles(virConnectPtr conn, goto cleanup; } - if (virLXCProcessStart(conn, driver, vm, - nfiles, files, - (flags & VIR_DOMAIN_START_AUTODESTROY), + if (virLXCProcessStart(driver, vm, nfiles, files, autoDestroyConn, VIR_DOMAIN_RUNNING_BOOTED) < 0) { virDomainAuditStart(vm, "booted", false); virLXCDomainObjEndJob(driver, vm); diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index 587ba1d3c1..4934a96e0c 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -87,21 +87,15 @@ static int virLXCProcessReboot(virLXCDriver *driver, virDomainObj *vm) { - virConnectPtr conn = virCloseCallbacksGetConn(driver->closeCallbacks, vm); + g_autoptr(virConnect) autoDestroyConn = virCloseCallbacksGetConn(driver->closeCallbacks, vm); int reason = vm->state.reason; - bool autodestroy = false; int ret = -1; virDomainDef *savedDef; VIR_DEBUG("Faking reboot"); - if (conn) { - virObjectRef(conn); - autodestroy = true; - } else { - conn = virConnectOpen("lxc:///system"); - /* Ignoring NULL conn which is mostly harmless here */ - } + if (autoDestroyConn) + virObjectRef(autoDestroyConn); /* In a reboot scenario, we need to make sure we continue * to use the current 'def', and not switch to 'newDef'. @@ -110,8 +104,7 @@ virLXCProcessReboot(virLXCDriver *driver, savedDef = g_steal_pointer(&vm->newDef); virLXCProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_SHUTDOWN, 0); vm->newDef = savedDef; - if (virLXCProcessStart(conn, driver, vm, - 0, NULL, autodestroy, reason) < 0) { + if (virLXCProcessStart(driver, vm, 0, NULL, autoDestroyConn, reason) < 0) { VIR_WARN("Unable to handle reboot of vm %s", vm->def->name); goto cleanup; @@ -120,7 +113,6 @@ virLXCProcessReboot(virLXCDriver *driver, ret = 0; cleanup: - virObjectUnref(conn); return ret; } @@ -1146,21 +1138,19 @@ virLXCProcessEnsureRootFS(virDomainObj *vm) /** * virLXCProcessStart: - * @conn: pointer to connection * @driver: pointer to driver structure * @vm: pointer to virtual machine structure - * @autoDestroy: mark the domain for auto destruction + * @autoDestroyConn: mark the domain for auto destruction for the passed connection object * @reason: reason for switching vm to running state * * Starts a vm * * Returns 0 on success or -1 in case of error */ -int virLXCProcessStart(virConnectPtr conn, - virLXCDriver * driver, +int virLXCProcessStart(virLXCDriver * driver, virDomainObj *vm, unsigned int nfiles, int *files, - bool autoDestroy, + virConnectPtr autoDestroyConn, virDomainRunningReason reason) { int rc = -1, r; @@ -1505,9 +1495,9 @@ int virLXCProcessStart(virConnectPtr conn, goto cleanup; } - if (autoDestroy && + if (autoDestroyConn && virCloseCallbacksSet(driver->closeCallbacks, vm, - conn, lxcProcessAutoDestroy) < 0) + autoDestroyConn, lxcProcessAutoDestroy) < 0) goto cleanup; /* We don't need the temporary NIC names anymore, clear them */ @@ -1568,8 +1558,7 @@ virLXCProcessAutostartDomain(virDomainObj *vm, virObjectLock(vm); if (vm->autostart && !virDomainObjIsActive(vm)) { - ret = virLXCProcessStart(data->conn, data->driver, vm, - 0, NULL, false, + ret = virLXCProcessStart(data->driver, vm, 0, NULL, NULL, VIR_DOMAIN_RUNNING_BOOTED); virDomainAuditStart(vm, "booted", ret >= 0); if (ret < 0) { diff --git a/src/lxc/lxc_process.h b/src/lxc/lxc_process.h index 1bce57809c..4b84e31fef 100644 --- a/src/lxc/lxc_process.h +++ b/src/lxc/lxc_process.h @@ -23,11 +23,10 @@ #include "lxc_conf.h" -int virLXCProcessStart(virConnectPtr conn, - virLXCDriver * driver, +int virLXCProcessStart(virLXCDriver * driver, virDomainObj *vm, unsigned int nfiles, int *files, - bool autoDestroy, + virConnectPtr autoDestroyConn, virDomainRunningReason reason); int virLXCProcessStop(virLXCDriver *driver, virDomainObj *vm,