]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virLXCProcessStart: Pass in virConnect object only when registering autodestroy
authorPeter Krempa <pkrempa@redhat.com>
Tue, 28 Jun 2022 14:30:34 +0000 (16:30 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 22 Jul 2022 09:11:42 +0000 (11:11 +0200)
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 <pkrempa@redhat.com>
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
src/lxc/lxc_driver.c
src/lxc/lxc_process.c
src/lxc/lxc_process.h

index 456d2fbae9f59e72179d25d1054d7d6e12419e35..6b2f721178ac560532793c5ef293c314ce437129 100644 (file)
@@ -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);
index 587ba1d3c1e70ba5414a93469b254bb9bb163802..4934a96e0cf6a9bd26c1d6a5f3295bb8f2544991 100644 (file)
@@ -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) {
index 1bce57809c95b3ae5bce8d91277acdceb0cfe042..4b84e31fefae59229414eb96a5ab6e26ca013b10 100644 (file)
 
 #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,