]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
bridge_driver: Use automatic mutex management
authorTim Wiederhake <twiederh@redhat.com>
Tue, 22 Mar 2022 16:47:08 +0000 (17:47 +0100)
committerTim Wiederhake <twiederh@redhat.com>
Tue, 5 Apr 2022 13:59:08 +0000 (15:59 +0200)
Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/network/bridge_driver.c
src/network/bridge_driver_linux.c

index e7049ba384ae20b165af0e7dd1630d0d0f8d1b06..6fc69ae5125f1ff77782d4cf2dc998e9eb6d9b71 100644 (file)
@@ -457,13 +457,11 @@ networkUpdateState(virNetworkObj *obj,
     g_autoptr(dnsmasqCaps) dnsmasq_caps = networkGetDnsmasqCaps(driver);
     virMacMap *macmap;
     g_autofree char *macMapFile = NULL;
-    int ret = -1;
+    VIR_LOCK_GUARD lock = virObjectLockGuard(obj);
+
+    if (!virNetworkObjIsActive(obj))
+        return 0;
 
-    virObjectLock(obj);
-    if (!virNetworkObjIsActive(obj)) {
-        ret = 0;
-        goto cleanup;
-    }
     def = virNetworkObjGetDef(obj);
 
     switch ((virNetworkForwardType) def->forward.type) {
@@ -477,10 +475,10 @@ networkUpdateState(virNetworkObj *obj,
 
         if (!(macMapFile = virMacMapFileName(driver->dnsmasqStateDir,
                                              def->bridge)))
-            goto cleanup;
+            return -1;
 
         if (!(macmap = virMacMapNew(macMapFile)))
-            goto cleanup;
+            return -1;
 
         virNetworkObjSetMacMap(obj, macmap);
 
@@ -509,7 +507,7 @@ networkUpdateState(virNetworkObj *obj,
     case VIR_NETWORK_FORWARD_LAST:
     default:
         virReportEnumRangeError(virNetworkForwardType, def->forward.type);
-        goto cleanup;
+        return -1;
     }
 
     virNetworkObjPortForEach(obj, networkUpdatePort, obj);
@@ -525,10 +523,7 @@ networkUpdateState(virNetworkObj *obj,
         virNetworkObjSetDnsmasqPid(obj, dnsmasqPid);
     }
 
-    ret = 0;
- cleanup:
-    virObjectUnlock(obj);
-    return ret;
+    return 0;
 }
 
 
@@ -536,19 +531,19 @@ static int
 networkAutostartConfig(virNetworkObj *obj,
                        void *opaque)
 {
+    VIR_LOCK_GUARD lock = virObjectLockGuard(obj);
     virNetworkDriverState *driver = opaque;
-    int ret = -1;
 
-    virObjectLock(obj);
-    if (virNetworkObjIsAutostart(obj) &&
-        !virNetworkObjIsActive(obj) &&
-        networkStartNetwork(driver, obj) < 0)
-        goto cleanup;
+    if (!virNetworkObjIsAutostart(obj))
+        return 0;
 
-    ret = 0;
- cleanup:
-    virObjectUnlock(obj);
-    return ret;
+    if (virNetworkObjIsActive(obj))
+        return 0;
+
+    if (networkStartNetwork(driver, obj) >= 0)
+        return 0;
+
+    return -1;
 }
 
 
@@ -1650,11 +1645,10 @@ static int
 networkRefreshDaemonsHelper(virNetworkObj *obj,
                             void *opaque)
 {
-    virNetworkDef *def;
+    VIR_LOCK_GUARD lock = virObjectLockGuard(obj);
     virNetworkDriverState *driver = opaque;
+    virNetworkDef *def = virNetworkObjGetDef(obj);
 
-    virObjectLock(obj);
-    def = virNetworkObjGetDef(obj);
     if (virNetworkObjIsActive(obj)) {
         switch ((virNetworkForwardType) def->forward.type) {
         case VIR_NETWORK_FORWARD_NONE:
@@ -1679,12 +1673,10 @@ networkRefreshDaemonsHelper(virNetworkObj *obj,
         case VIR_NETWORK_FORWARD_LAST:
         default:
             virReportEnumRangeError(virNetworkForwardType, def->forward.type);
-            goto cleanup;
+            return 0;
         }
     }
 
- cleanup:
-    virObjectUnlock(obj);
     return 0;
 }
 
@@ -1706,10 +1698,9 @@ static int
 networkReloadFirewallRulesHelper(virNetworkObj *obj,
                                  void *opaque G_GNUC_UNUSED)
 {
-    virNetworkDef *def;
+    VIR_LOCK_GUARD lock = virObjectLockGuard(obj);
+    virNetworkDef *def = virNetworkObjGetDef(obj);
 
-    virObjectLock(obj);
-    def = virNetworkObjGetDef(obj);
     if (virNetworkObjIsActive(obj)) {
         switch ((virNetworkForwardType) def->forward.type) {
         case VIR_NETWORK_FORWARD_NONE:
@@ -1735,12 +1726,10 @@ networkReloadFirewallRulesHelper(virNetworkObj *obj,
         case VIR_NETWORK_FORWARD_LAST:
         default:
             virReportEnumRangeError(virNetworkForwardType, def->forward.type);
-            goto cleanup;
+            return 0;
         }
     }
 
- cleanup:
-    virObjectUnlock(obj);
     return 0;
 }
 
index 34982706beb90c25c4bd7c01a65929ae47d34530..98d2a33a1da04e83563d4d7146f0374d5e31c9da 100644 (file)
@@ -87,9 +87,9 @@ static int
 networkHasRunningNetworksWithFWHelper(virNetworkObj *obj,
                                 void *opaque)
 {
+    VIR_LOCK_GUARD lock = virObjectLockGuard(obj);
     bool *activeWithFW = opaque;
 
-    virObjectLock(obj);
     if (virNetworkObjIsActive(obj)) {
         virNetworkDef *def = virNetworkObjGetDef(obj);
 
@@ -111,8 +111,6 @@ networkHasRunningNetworksWithFWHelper(virNetworkObj *obj,
         }
     }
 
-    virObjectUnlock(obj);
-
     /*
      * terminate ForEach early once we find an active network that
      * adds Firewall rules (return status is ignored)