[libvirt] [PATCH v2 19/24] bridge_driver: Drop networkDriverLock() from almost everywhere

Michal Privoznik mprivozn at redhat.com
Thu Mar 5 11:05:20 UTC 2015


Now that we have fine grained locks, there's no need to lock the
whole driver. We can rely on self-locking APIs.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 src/network/bridge_driver.c | 49 +++++++--------------------------------------
 1 file changed, 7 insertions(+), 42 deletions(-)

diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index d3f3f4a..529ba2b 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -129,9 +129,7 @@ networkObjFromNetwork(virNetworkPtr net)
     virNetworkObjPtr network;
     char uuidstr[VIR_UUID_STRING_BUFLEN];
 
-    networkDriverLock();
     network = virNetworkObjFindByUUID(driver->networks, net->uuid);
-    networkDriverUnlock();
 
     if (!network) {
         virUUIDFormat(net->uuid, uuidstr);
@@ -264,6 +262,11 @@ networkRemoveInactive(virNetworkObjPtr net)
 
     int ret = -1;
 
+    virObjectRef(net);
+    virObjectUnlock(net);
+    networkDriverLock();
+    virObjectLock(net);
+
     /* remove the (possibly) existing dnsmasq and radvd files */
     if (!(dctx = dnsmasqContextNew(def->name,
                                    driver->dnsmasqStateDir))) {
@@ -315,6 +318,8 @@ networkRemoveInactive(virNetworkObjPtr net)
     VIR_FREE(radvdpidbase);
     VIR_FREE(statusfile);
     dnsmasqContextFree(dctx);
+    networkDriverUnlock();
+    virObjectUnref(net);
     return ret;
 }
 
@@ -700,11 +705,9 @@ networkStateAutoStart(void)
     if (!driver)
         return;
 
-    networkDriverLock();
     virNetworkObjListForEach(driver->networks,
                              networkAutostartConfig,
                              NULL);
-    networkDriverUnlock();
 }
 
 /**
@@ -2478,9 +2481,7 @@ static virNetworkPtr networkLookupByUUID(virConnectPtr conn,
     virNetworkObjPtr network;
     virNetworkPtr ret = NULL;
 
-    networkDriverLock();
     network = virNetworkObjFindByUUID(driver->networks, uuid);
-    networkDriverUnlock();
     if (!network) {
         char uuidstr[VIR_UUID_STRING_BUFLEN];
         virUUIDFormat(uuid, uuidstr);
@@ -2506,9 +2507,7 @@ static virNetworkPtr networkLookupByName(virConnectPtr conn,
     virNetworkObjPtr network;
     virNetworkPtr ret = NULL;
 
-    networkDriverLock();
     network = virNetworkObjFindByName(driver->networks, name);
-    networkDriverUnlock();
     if (!network) {
         virReportError(VIR_ERR_NO_NETWORK,
                        _("no network with matching name '%s'"), name);
@@ -2532,12 +2531,10 @@ static int networkConnectNumOfNetworks(virConnectPtr conn)
     if (virConnectNumOfNetworksEnsureACL(conn) < 0)
         return -1;
 
-    networkDriverLock();
     nactive = virNetworkObjListNumOfNetworks(driver->networks,
                                              true,
                                              virConnectNumOfNetworksCheckACL,
                                              conn);
-    networkDriverUnlock();
 
     return nactive;
 }
@@ -2548,12 +2545,10 @@ static int networkConnectListNetworks(virConnectPtr conn, char **const names, in
     if (virConnectListNetworksEnsureACL(conn) < 0)
         return -1;
 
-    networkDriverLock();
     got = virNetworkObjListGetNames(driver->networks,
                                     true, names, nnames,
                                     virConnectListNetworksCheckACL,
                                     conn);
-    networkDriverUnlock();
 
     return got;
 }
@@ -2565,12 +2560,10 @@ static int networkConnectNumOfDefinedNetworks(virConnectPtr conn)
     if (virConnectNumOfDefinedNetworksEnsureACL(conn) < 0)
         return -1;
 
-    networkDriverLock();
     ninactive = virNetworkObjListNumOfNetworks(driver->networks,
                                                false,
                                                virConnectNumOfDefinedNetworksCheckACL,
                                                conn);
-    networkDriverUnlock();
 
     return ninactive;
 }
@@ -2581,12 +2574,10 @@ static int networkConnectListDefinedNetworks(virConnectPtr conn, char **const na
     if (virConnectListDefinedNetworksEnsureACL(conn) < 0)
         return -1;
 
-    networkDriverLock();
     got = virNetworkObjListGetNames(driver->networks,
                                     false, names, nnames,
                                     virConnectListDefinedNetworksCheckACL,
                                     conn);
-    networkDriverUnlock();
     return got;
 }
 
@@ -2602,11 +2593,9 @@ networkConnectListAllNetworks(virConnectPtr conn,
     if (virConnectListAllNetworksEnsureACL(conn) < 0)
         goto cleanup;
 
-    networkDriverLock();
     ret = virNetworkObjListExport(conn, driver->networks, nets,
                                   virConnectListAllNetworksCheckACL,
                                   flags);
-    networkDriverUnlock();
 
  cleanup:
     return ret;
@@ -2917,8 +2906,6 @@ static virNetworkPtr networkCreateXML(virConnectPtr conn, const char *xml)
     virNetworkPtr ret = NULL;
     virObjectEventPtr event = NULL;
 
-    networkDriverLock();
-
     if (!(def = virNetworkDefParseString(xml)))
         goto cleanup;
 
@@ -2955,7 +2942,6 @@ static virNetworkPtr networkCreateXML(virConnectPtr conn, const char *xml)
     if (event)
         virObjectEventStateQueue(driver->networkEventState, event);
     virNetworkObjEndAPI(&network);
-    networkDriverUnlock();
     return ret;
 }
 
@@ -2967,8 +2953,6 @@ static virNetworkPtr networkDefineXML(virConnectPtr conn, const char *xml)
     virNetworkPtr ret = NULL;
     virObjectEventPtr event = NULL;
 
-    networkDriverLock();
-
     if (!(def = virNetworkDefParseString(xml)))
         goto cleanup;
 
@@ -3010,7 +2994,6 @@ static virNetworkPtr networkDefineXML(virConnectPtr conn, const char *xml)
     if (freeDef)
         virNetworkDefFree(def);
     virNetworkObjEndAPI(&network);
-    networkDriverUnlock();
     return ret;
 }
 
@@ -3022,8 +3005,6 @@ networkUndefine(virNetworkPtr net)
     bool active = false;
     virObjectEventPtr event = NULL;
 
-    networkDriverLock();
-
     network = virNetworkObjFindByUUID(driver->networks, net->uuid);
     if (!network) {
         virReportError(VIR_ERR_NO_NETWORK,
@@ -3067,7 +3048,6 @@ networkUndefine(virNetworkPtr net)
     if (event)
         virObjectEventStateQueue(driver->networkEventState, event);
     virNetworkObjEndAPI(&network);
-    networkDriverUnlock();
     return ret;
 }
 
@@ -3091,8 +3071,6 @@ networkUpdate(virNetworkPtr net,
                   VIR_NETWORK_UPDATE_AFFECT_CONFIG,
                   -1);
 
-    networkDriverLock();
-
     network = virNetworkObjFindByUUID(driver->networks, net->uuid);
     if (!network) {
         virReportError(VIR_ERR_NO_NETWORK,
@@ -3238,7 +3216,6 @@ networkUpdate(virNetworkPtr net,
     ret = 0;
  cleanup:
     virNetworkObjEndAPI(&network);
-    networkDriverUnlock();
     return ret;
 }
 
@@ -3248,7 +3225,6 @@ static int networkCreate(virNetworkPtr net)
     int ret = -1;
     virObjectEventPtr event = NULL;
 
-    networkDriverLock();
     network = virNetworkObjFindByUUID(driver->networks, net->uuid);
 
     if (!network) {
@@ -3272,7 +3248,6 @@ static int networkCreate(virNetworkPtr net)
     if (event)
         virObjectEventStateQueue(driver->networkEventState, event);
     virNetworkObjEndAPI(&network);
-    networkDriverUnlock();
     return ret;
 }
 
@@ -3282,7 +3257,6 @@ static int networkDestroy(virNetworkPtr net)
     int ret = -1;
     virObjectEventPtr event = NULL;
 
-    networkDriverLock();
     network = virNetworkObjFindByUUID(driver->networks, net->uuid);
 
     if (!network) {
@@ -3319,7 +3293,6 @@ static int networkDestroy(virNetworkPtr net)
     if (event)
         virObjectEventStateQueue(driver->networkEventState, event);
     virNetworkObjEndAPI(&network);
-    networkDriverUnlock();
     return ret;
 }
 
@@ -3729,9 +3702,7 @@ networkAllocateActualDevice(virDomainDefPtr dom,
     virDomainActualNetDefFree(iface->data.network.actual);
     iface->data.network.actual = NULL;
 
-    networkDriverLock();
     network = virNetworkObjFindByName(driver->networks, iface->data.network.name);
-    networkDriverUnlock();
     if (!network) {
         virReportError(VIR_ERR_NO_NETWORK,
                        _("no network with matching name '%s'"),
@@ -4137,9 +4108,7 @@ networkNotifyActualDevice(virDomainDefPtr dom,
     if (iface->type != VIR_DOMAIN_NET_TYPE_NETWORK)
         return 0;
 
-    networkDriverLock();
     network = virNetworkObjFindByName(driver->networks, iface->data.network.name);
-    networkDriverUnlock();
     if (!network) {
         virReportError(VIR_ERR_NO_NETWORK,
                        _("no network with matching name '%s'"),
@@ -4336,9 +4305,7 @@ networkReleaseActualDevice(virDomainDefPtr dom,
     if (iface->type != VIR_DOMAIN_NET_TYPE_NETWORK)
         return 0;
 
-    networkDriverLock();
     network = virNetworkObjFindByName(driver->networks, iface->data.network.name);
-    networkDriverUnlock();
     if (!network) {
         virReportError(VIR_ERR_NO_NETWORK,
                        _("no network with matching name '%s'"),
@@ -4494,9 +4461,7 @@ networkGetNetworkAddress(const char *netname, char **netaddr)
     char *dev_name = NULL;
 
     *netaddr = NULL;
-    networkDriverLock();
     network = virNetworkObjFindByName(driver->networks, netname);
-    networkDriverUnlock();
     if (!network) {
         virReportError(VIR_ERR_NO_NETWORK,
                        _("no network with matching name '%s'"),
-- 
2.0.5




More information about the libvir-list mailing list