mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
network: Convert virNetworkObjList to use RWObjectLockable
Let's use the RWObjectLockable for the various list lock mgmt. Only time need Write lock will be for Add, Remove, and Prune logic.
This commit is contained in:
parent
0c691e9806
commit
3dcab1de5d
@ -61,7 +61,7 @@ struct _virNetworkObj {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct _virNetworkObjList {
|
struct _virNetworkObjList {
|
||||||
virObjectLockable parent;
|
virObjectRWLockable parent;
|
||||||
|
|
||||||
virHashTablePtr objs;
|
virHashTablePtr objs;
|
||||||
};
|
};
|
||||||
@ -80,7 +80,7 @@ virNetworkObjOnceInit(void)
|
|||||||
virNetworkObjDispose)))
|
virNetworkObjDispose)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (!(virNetworkObjListClass = virClassNew(virClassForObjectLockable(),
|
if (!(virNetworkObjListClass = virClassNew(virClassForObjectRWLockable(),
|
||||||
"virNetworkObjList",
|
"virNetworkObjList",
|
||||||
sizeof(virNetworkObjList),
|
sizeof(virNetworkObjList),
|
||||||
virNetworkObjListDispose)))
|
virNetworkObjListDispose)))
|
||||||
@ -337,7 +337,7 @@ virNetworkObjListNew(void)
|
|||||||
if (virNetworkObjInitialize() < 0)
|
if (virNetworkObjInitialize() < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!(nets = virObjectLockableNew(virNetworkObjListClass)))
|
if (!(nets = virObjectRWLockableNew(virNetworkObjListClass)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!(nets->objs = virHashCreate(50, virObjectFreeHashData))) {
|
if (!(nets->objs = virHashCreate(50, virObjectFreeHashData))) {
|
||||||
@ -381,9 +381,9 @@ virNetworkObjFindByUUID(virNetworkObjListPtr nets,
|
|||||||
{
|
{
|
||||||
virNetworkObjPtr obj;
|
virNetworkObjPtr obj;
|
||||||
|
|
||||||
virObjectLock(nets);
|
virObjectRWLockRead(nets);
|
||||||
obj = virNetworkObjFindByUUIDLocked(nets, uuid);
|
obj = virNetworkObjFindByUUIDLocked(nets, uuid);
|
||||||
virObjectUnlock(nets);
|
virObjectRWUnlock(nets);
|
||||||
if (obj)
|
if (obj)
|
||||||
virObjectLock(obj);
|
virObjectLock(obj);
|
||||||
return obj;
|
return obj;
|
||||||
@ -435,9 +435,9 @@ virNetworkObjFindByName(virNetworkObjListPtr nets,
|
|||||||
{
|
{
|
||||||
virNetworkObjPtr obj;
|
virNetworkObjPtr obj;
|
||||||
|
|
||||||
virObjectLock(nets);
|
virObjectRWLockRead(nets);
|
||||||
obj = virNetworkObjFindByNameLocked(nets, name);
|
obj = virNetworkObjFindByNameLocked(nets, name);
|
||||||
virObjectUnlock(nets);
|
virObjectRWUnlock(nets);
|
||||||
if (obj)
|
if (obj)
|
||||||
virObjectLock(obj);
|
virObjectLock(obj);
|
||||||
return obj;
|
return obj;
|
||||||
@ -638,9 +638,9 @@ virNetworkObjAssignDef(virNetworkObjListPtr nets,
|
|||||||
{
|
{
|
||||||
virNetworkObjPtr obj;
|
virNetworkObjPtr obj;
|
||||||
|
|
||||||
virObjectLock(nets);
|
virObjectRWLockWrite(nets);
|
||||||
obj = virNetworkObjAssignDefLocked(nets, def, flags);
|
obj = virNetworkObjAssignDefLocked(nets, def, flags);
|
||||||
virObjectUnlock(nets);
|
virObjectRWUnlock(nets);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -789,10 +789,10 @@ virNetworkObjRemoveInactive(virNetworkObjListPtr nets,
|
|||||||
virUUIDFormat(obj->def->uuid, uuidstr);
|
virUUIDFormat(obj->def->uuid, uuidstr);
|
||||||
virObjectRef(obj);
|
virObjectRef(obj);
|
||||||
virObjectUnlock(obj);
|
virObjectUnlock(obj);
|
||||||
virObjectLock(nets);
|
virObjectRWLockWrite(nets);
|
||||||
virObjectLock(obj);
|
virObjectLock(obj);
|
||||||
virHashRemoveEntry(nets->objs, uuidstr);
|
virHashRemoveEntry(nets->objs, uuidstr);
|
||||||
virObjectUnlock(nets);
|
virObjectRWUnlock(nets);
|
||||||
virObjectUnref(obj);
|
virObjectUnref(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1180,9 +1180,9 @@ virNetworkObjBridgeInUse(virNetworkObjListPtr nets,
|
|||||||
virNetworkObjPtr obj;
|
virNetworkObjPtr obj;
|
||||||
struct virNetworkObjBridgeInUseHelperData data = {bridge, skipname};
|
struct virNetworkObjBridgeInUseHelperData data = {bridge, skipname};
|
||||||
|
|
||||||
virObjectLock(nets);
|
virObjectRWLockRead(nets);
|
||||||
obj = virHashSearch(nets->objs, virNetworkObjBridgeInUseHelper, &data, NULL);
|
obj = virHashSearch(nets->objs, virNetworkObjBridgeInUseHelper, &data, NULL);
|
||||||
virObjectUnlock(nets);
|
virObjectRWUnlock(nets);
|
||||||
|
|
||||||
return obj != NULL;
|
return obj != NULL;
|
||||||
}
|
}
|
||||||
@ -1369,7 +1369,7 @@ virNetworkObjListExport(virConnectPtr conn,
|
|||||||
.conn = conn, .nets = NULL, .filter = filter, .flags = flags,
|
.conn = conn, .nets = NULL, .filter = filter, .flags = flags,
|
||||||
.nnets = 0, .error = false };
|
.nnets = 0, .error = false };
|
||||||
|
|
||||||
virObjectLock(netobjs);
|
virObjectRWLockRead(netobjs);
|
||||||
if (nets && VIR_ALLOC_N(data.nets, virHashSize(netobjs->objs) + 1) < 0)
|
if (nets && VIR_ALLOC_N(data.nets, virHashSize(netobjs->objs) + 1) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
@ -1387,7 +1387,7 @@ virNetworkObjListExport(virConnectPtr conn,
|
|||||||
|
|
||||||
ret = data.nnets;
|
ret = data.nnets;
|
||||||
cleanup:
|
cleanup:
|
||||||
virObjectUnlock(netobjs);
|
virObjectRWUnlock(netobjs);
|
||||||
while (data.nets && data.nnets)
|
while (data.nets && data.nnets)
|
||||||
virObjectUnref(data.nets[--data.nnets]);
|
virObjectUnref(data.nets[--data.nnets]);
|
||||||
|
|
||||||
@ -1435,9 +1435,9 @@ virNetworkObjListForEach(virNetworkObjListPtr nets,
|
|||||||
{
|
{
|
||||||
struct virNetworkObjListForEachHelperData data = {
|
struct virNetworkObjListForEachHelperData data = {
|
||||||
.callback = callback, .opaque = opaque, .ret = 0};
|
.callback = callback, .opaque = opaque, .ret = 0};
|
||||||
virObjectLock(nets);
|
virObjectRWLockRead(nets);
|
||||||
virHashForEach(nets->objs, virNetworkObjListForEachHelper, &data);
|
virHashForEach(nets->objs, virNetworkObjListForEachHelper, &data);
|
||||||
virObjectUnlock(nets);
|
virObjectRWUnlock(nets);
|
||||||
return data.ret;
|
return data.ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1503,9 +1503,9 @@ virNetworkObjListGetNames(virNetworkObjListPtr nets,
|
|||||||
.conn = conn, .filter = filter, .names = names, .nnames = 0,
|
.conn = conn, .filter = filter, .names = names, .nnames = 0,
|
||||||
.maxnames = maxnames, .active = active, .error = false};
|
.maxnames = maxnames, .active = active, .error = false};
|
||||||
|
|
||||||
virObjectLock(nets);
|
virObjectRWLockRead(nets);
|
||||||
virHashForEach(nets->objs, virNetworkObjListGetHelper, &data);
|
virHashForEach(nets->objs, virNetworkObjListGetHelper, &data);
|
||||||
virObjectUnlock(nets);
|
virObjectRWUnlock(nets);
|
||||||
|
|
||||||
if (data.error)
|
if (data.error)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -1530,9 +1530,9 @@ virNetworkObjListNumOfNetworks(virNetworkObjListPtr nets,
|
|||||||
.conn = conn, .filter = filter, .names = NULL, .nnames = 0,
|
.conn = conn, .filter = filter, .names = NULL, .nnames = 0,
|
||||||
.maxnames = -1, .active = active, .error = false};
|
.maxnames = -1, .active = active, .error = false};
|
||||||
|
|
||||||
virObjectLock(nets);
|
virObjectRWLockRead(nets);
|
||||||
virHashForEach(nets->objs, virNetworkObjListGetHelper, &data);
|
virHashForEach(nets->objs, virNetworkObjListGetHelper, &data);
|
||||||
virObjectUnlock(nets);
|
virObjectRWUnlock(nets);
|
||||||
|
|
||||||
return data.nnames;
|
return data.nnames;
|
||||||
}
|
}
|
||||||
@ -1572,7 +1572,7 @@ virNetworkObjListPrune(virNetworkObjListPtr nets,
|
|||||||
{
|
{
|
||||||
struct virNetworkObjListPruneHelperData data = {flags};
|
struct virNetworkObjListPruneHelperData data = {flags};
|
||||||
|
|
||||||
virObjectLock(nets);
|
virObjectRWLockWrite(nets);
|
||||||
virHashRemoveSet(nets->objs, virNetworkObjListPruneHelper, &data);
|
virHashRemoveSet(nets->objs, virNetworkObjListPruneHelper, &data);
|
||||||
virObjectUnlock(nets);
|
virObjectRWUnlock(nets);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user