]> xenbits.xensource.com Git - libvirt.git/commitdiff
network: Clean up after disappeared transient inactive networks
authorMartin Kletzander <mkletzan@redhat.com>
Tue, 3 Sep 2024 11:07:30 +0000 (13:07 +0200)
committerMartin Kletzander <mkletzan@redhat.com>
Tue, 17 Sep 2024 07:40:38 +0000 (09:40 +0200)
If a network disappeared the daemon should not only remove it from the
list of networks, but also do a proper cleanup.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
src/network/bridge_driver.c

index 0e8057e24aedc92e3276b326d2aa3896c5112184..0ba62d986ff4d3a2ac91759af6240998c0f410e5 100644 (file)
@@ -533,6 +533,23 @@ networkUpdateState(virNetworkObj *obj,
 }
 
 
+static int
+networkCleanupTransientInactive(virNetworkObj *obj,
+                                void *opaque)
+{
+    virNetworkDriverState *driver = opaque;
+
+    if (!virNetworkObjIsActive(obj) &&
+        !virNetworkObjIsPersistent(obj)) {
+        /* We can only do a cleanup here so that this can be called from an
+         * iterator over the networks */
+        networkCleanupInactive(driver, obj);
+    }
+
+    return 0;
+}
+
+
 static int
 networkAutostartConfig(virNetworkObj *obj,
                        void *opaque)
@@ -659,6 +676,11 @@ networkStateInitialize(bool privileged,
     virNetworkObjListForEach(network_driver->networks,
                              networkUpdateState,
                              network_driver);
+    /* Before removing inactive transient networks from the list make sure we
+     * clean up after them as well */
+    virNetworkObjListForEach(network_driver->networks,
+                             networkCleanupTransientInactive,
+                             network_driver);
     virNetworkObjListPrune(network_driver->networks,
                            VIR_CONNECT_LIST_NETWORKS_INACTIVE |
                            VIR_CONNECT_LIST_NETWORKS_TRANSIENT);