Signed-off-by: Rafael Fonseca <r4f4rfs@xxxxxxxxx> --- src/conf/virdomainobjlist.c | 35 ++++++++++--------- src/conf/virinterfaceobj.c | 18 +++++----- src/conf/virnetworkobj.c | 20 +++++------ src/conf/virnodedeviceobj.c | 16 ++++----- src/conf/virnwfilterbindingobjlist.c | 14 ++++---- src/conf/virsecretobj.c | 16 ++++----- src/conf/virstorageobj.c | 50 ++++++++++++++-------------- src/libvirt_private.syms | 3 +- src/util/virobject.c | 27 +++++++++------ src/util/virobject.h | 8 +++-- 10 files changed, 110 insertions(+), 97 deletions(-) diff --git a/src/conf/virdomainobjlist.c b/src/conf/virdomainobjlist.c index 417025ae9f..f3d4d81bb1 100644 --- a/src/conf/virdomainobjlist.c +++ b/src/conf/virdomainobjlist.c @@ -120,7 +120,7 @@ virDomainObjListFindByID(virDomainObjListPtr doms, virObjectRWLockRead(doms); obj = virHashSearch(doms->objs, virDomainObjListSearchID, &id, NULL); virObjectRef(obj); - virObjectRWUnlock(doms); + virObjectRWUnlockRead(doms); if (obj) { virObjectLock(obj); if (obj->removing) { @@ -167,7 +167,7 @@ virDomainObjListFindByUUID(virDomainObjListPtr doms, virObjectRWLockRead(doms); obj = virDomainObjListFindByUUIDLocked(doms, uuid); - virObjectRWUnlock(doms); + virObjectRWUnlockRead(doms); if (obj && obj->removing) { virObjectUnlock(obj); @@ -210,7 +210,7 @@ virDomainObjListFindByName(virDomainObjListPtr doms, virObjectRWLockRead(doms); obj = virDomainObjListFindByNameLocked(doms, name); - virObjectRWUnlock(doms); + virObjectRWUnlockRead(doms); if (obj && obj->removing) { virObjectUnlock(obj); @@ -361,7 +361,7 @@ virDomainObjPtr virDomainObjListAdd(virDomainObjListPtr doms, virObjectRWLockWrite(doms); ret = virDomainObjListAddLocked(doms, def, xmlopt, flags, oldDef); - virObjectRWUnlock(doms); + virObjectRWUnlockWrite(doms); return ret; } @@ -409,7 +409,7 @@ virDomainObjListRemove(virDomainObjListPtr doms, virObjectLock(dom); virDomainObjListRemoveLocked(doms, dom); virObjectUnref(dom); - virObjectRWUnlock(doms); + virObjectRWUnlockWrite(doms); } @@ -475,7 +475,7 @@ virDomainObjListRename(virDomainObjListPtr doms, ret = 0; cleanup: - virObjectRWUnlock(doms); + virObjectRWUnlockWrite(doms); VIR_FREE(old_name); return ret; } @@ -634,7 +634,7 @@ virDomainObjListLoadAllConfigs(virDomainObjListPtr doms, } VIR_DIR_CLOSE(dir); - virObjectRWUnlock(doms); + virObjectRWUnlockWrite(doms); return ret; } @@ -680,7 +680,7 @@ virDomainObjListNumOfDomains(virDomainObjListPtr doms, struct virDomainObjListData data = { filter, conn, active, 0 }; virObjectRWLockRead(doms); virHashForEach(doms->objs, virDomainObjListCount, &data); - virObjectRWUnlock(doms); + virObjectRWUnlockRead(doms); return data.count; } @@ -724,7 +724,7 @@ virDomainObjListGetActiveIDs(virDomainObjListPtr doms, 0, maxids, ids }; virObjectRWLockRead(doms); virHashForEach(doms->objs, virDomainObjListCopyActiveIDs, &data); - virObjectRWUnlock(doms); + virObjectRWUnlockRead(doms); return data.numids; } @@ -777,7 +777,7 @@ virDomainObjListGetInactiveNames(virDomainObjListPtr doms, size_t i; virObjectRWLockRead(doms); virHashForEach(doms->objs, virDomainObjListCopyInactiveNames, &data); - virObjectRWUnlock(doms); + virObjectRWUnlockRead(doms); if (data.oom) { for (i = 0; i < data.numnames; i++) VIR_FREE(data.names[i]); @@ -839,7 +839,10 @@ virDomainObjListForEach(virDomainObjListPtr doms, else virObjectRWLockRead(doms); virHashForEach(doms->objs, virDomainObjListHelper, &data); - virObjectRWUnlock(doms); + if (modify) + virObjectRWUnlockWrite(doms); + else + virObjectRWUnlockRead(doms); return data.ret; } @@ -982,12 +985,12 @@ virDomainObjListCollect(virDomainObjListPtr domlist, virObjectRWLockRead(domlist); sa_assert(domlist->objs); if (VIR_ALLOC_N(data.vms, virHashSize(domlist->objs)) < 0) { - virObjectRWUnlock(domlist); + virObjectRWUnlockRead(domlist); return -1; } virHashForEach(domlist->objs, virDomainObjListCollectIterator, &data); - virObjectRWUnlock(domlist); + virObjectRWUnlockRead(domlist); virDomainObjListFilter(&data.vms, &data.nvms, conn, filter, flags); @@ -1026,7 +1029,7 @@ virDomainObjListConvert(virDomainObjListPtr domlist, if (skip_missing) continue; - virObjectRWUnlock(domlist); + virObjectRWUnlockRead(domlist); virReportError(VIR_ERR_NO_DOMAIN, _("no domain with matching uuid '%s' (%s)"), uuidstr, dom->name); @@ -1036,12 +1039,12 @@ virDomainObjListConvert(virDomainObjListPtr domlist, virObjectRef(vm); if (VIR_APPEND_ELEMENT(*vms, *nvms, vm) < 0) { - virObjectRWUnlock(domlist); + virObjectRWUnlockRead(domlist); virObjectUnref(vm); goto error; } } - virObjectRWUnlock(domlist); + virObjectRWUnlockRead(domlist); sa_assert(*vms); virDomainObjListFilter(vms, nvms, conn, filter, flags); diff --git a/src/conf/virinterfaceobj.c b/src/conf/virinterfaceobj.c index 43ba395d2b..f52ff88c2a 100644 --- a/src/conf/virinterfaceobj.c +++ b/src/conf/virinterfaceobj.c @@ -200,7 +200,7 @@ virInterfaceObjListFindByMACString(virInterfaceObjListPtr interfaces, virObjectRWLockRead(interfaces); virHashForEach(interfaces->objsName, virInterfaceObjListFindByMACStringCb, &data); - virObjectRWUnlock(interfaces); + virObjectRWUnlockRead(interfaces); if (data.error) goto error; @@ -230,7 +230,7 @@ virInterfaceObjListFindByName(virInterfaceObjListPtr interfaces, virInterfaceObjPtr obj; virObjectRWLockRead(interfaces); obj = virInterfaceObjListFindByNameLocked(interfaces, name); - virObjectRWUnlock(interfaces); + virObjectRWUnlockRead(interfaces); if (obj) virObjectLock(obj); @@ -337,7 +337,7 @@ virInterfaceObjListExport(virConnectPtr conn, ret = data.nifaces; cleanup: - virObjectRWUnlock(ifaceobjs); + virObjectRWUnlockRead(ifaceobjs); while (data.ifaces && data.nifaces) virObjectUnref(data.ifaces[--data.nifaces]); @@ -413,7 +413,7 @@ virInterfaceObjListClone(virInterfaceObjListPtr interfaces) virObjectRWLockRead(interfaces); virHashForEach(interfaces->objsName, virInterfaceObjListCloneCb, &data); - virObjectRWUnlock(interfaces); + virObjectRWUnlockRead(interfaces); if (data.error) goto error; @@ -445,13 +445,13 @@ virInterfaceObjListAssignDef(virInterfaceObjListPtr interfaces, } obj->def = def; - virObjectRWUnlock(interfaces); + virObjectRWUnlockWrite(interfaces); return obj; error: virInterfaceObjEndAPI(&obj); - virObjectRWUnlock(interfaces); + virObjectRWUnlockWrite(interfaces); return NULL; } @@ -470,7 +470,7 @@ virInterfaceObjListRemove(virInterfaceObjListPtr interfaces, virHashRemoveEntry(interfaces->objsName, obj->def->name); virObjectUnlock(obj); virObjectUnref(obj); - virObjectRWUnlock(interfaces); + virObjectRWUnlockWrite(interfaces); } @@ -507,7 +507,7 @@ virInterfaceObjListNumOfInterfaces(virInterfaceObjListPtr interfaces, virObjectRWLockRead(interfaces); virHashForEach(interfaces->objsName, virInterfaceObjListNumOfInterfacesCb, &data); - virObjectRWUnlock(interfaces); + virObjectRWUnlockRead(interfaces); return data.count; } @@ -562,7 +562,7 @@ virInterfaceObjListGetNames(virInterfaceObjListPtr interfaces, virObjectRWLockRead(interfaces); virHashForEach(interfaces->objsName, virInterfaceObjListGetNamesCb, &data); - virObjectRWUnlock(interfaces); + virObjectRWUnlockRead(interfaces); if (data.error) goto error; diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index b2affaacd3..d47e2ab793 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -395,7 +395,7 @@ virNetworkObjFindByUUID(virNetworkObjListPtr nets, virObjectRWLockRead(nets); obj = virNetworkObjFindByUUIDLocked(nets, uuid); - virObjectRWUnlock(nets); + virObjectRWUnlockRead(nets); if (obj) virObjectLock(obj); return obj; @@ -449,7 +449,7 @@ virNetworkObjFindByName(virNetworkObjListPtr nets, virObjectRWLockRead(nets); obj = virNetworkObjFindByNameLocked(nets, name); - virObjectRWUnlock(nets); + virObjectRWUnlockRead(nets); if (obj) virObjectLock(obj); return obj; @@ -652,7 +652,7 @@ virNetworkObjAssignDef(virNetworkObjListPtr nets, virObjectRWLockWrite(nets); obj = virNetworkObjAssignDefLocked(nets, def, flags); - virObjectRWUnlock(nets); + virObjectRWUnlockWrite(nets); return obj; } @@ -805,7 +805,7 @@ virNetworkObjRemoveInactive(virNetworkObjListPtr nets, virObjectRWLockWrite(nets); virObjectLock(obj); virHashRemoveEntry(nets->objs, uuidstr); - virObjectRWUnlock(nets); + virObjectRWUnlockWrite(nets); virObjectUnref(obj); } @@ -1218,7 +1218,7 @@ virNetworkObjBridgeInUse(virNetworkObjListPtr nets, virObjectRWLockRead(nets); obj = virHashSearch(nets->objs, virNetworkObjBridgeInUseHelper, &data, NULL); - virObjectRWUnlock(nets); + virObjectRWUnlockRead(nets); return obj != NULL; } @@ -1428,7 +1428,7 @@ virNetworkObjListExport(virConnectPtr conn, ret = data.nnets; cleanup: - virObjectRWUnlock(netobjs); + virObjectRWUnlockWrite(netobjs); while (data.nets && data.nnets) virObjectUnref(data.nets[--data.nnets]); @@ -1478,7 +1478,7 @@ virNetworkObjListForEach(virNetworkObjListPtr nets, .callback = callback, .opaque = opaque, .ret = 0}; virObjectRWLockRead(nets); virHashForEach(nets->objs, virNetworkObjListForEachHelper, &data); - virObjectRWUnlock(nets); + virObjectRWUnlockRead(nets); return data.ret; } @@ -1543,7 +1543,7 @@ virNetworkObjListGetNames(virNetworkObjListPtr nets, virObjectRWLockRead(nets); virHashForEach(nets->objs, virNetworkObjListGetHelper, &data); - virObjectRWUnlock(nets); + virObjectRWUnlockRead(nets); if (data.error) goto cleanup; @@ -1570,7 +1570,7 @@ virNetworkObjListNumOfNetworks(virNetworkObjListPtr nets, virObjectRWLockRead(nets); virHashForEach(nets->objs, virNetworkObjListGetHelper, &data); - virObjectRWUnlock(nets); + virObjectRWUnlockRead(nets); return data.nnames; } @@ -1612,7 +1612,7 @@ virNetworkObjListPrune(virNetworkObjListPtr nets, virObjectRWLockWrite(nets); virHashRemoveSet(nets->objs, virNetworkObjListPruneHelper, &data); - virObjectRWUnlock(nets); + virObjectRWUnlockWrite(nets); } diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c index 3a34a324ca..14abf77cbf 100644 --- a/src/conf/virnodedeviceobj.c +++ b/src/conf/virnodedeviceobj.c @@ -188,7 +188,7 @@ virNodeDeviceObjListSearch(virNodeDeviceObjListPtr devs, virObjectRWLockRead(devs); obj = virHashSearch(devs->objs, callback, data, NULL); virObjectRef(obj); - virObjectRWUnlock(devs); + virObjectRWUnlockRead(devs); if (obj) virObjectLock(obj); @@ -241,7 +241,7 @@ virNodeDeviceObjListFindByName(virNodeDeviceObjListPtr devs, virObjectRWLockRead(devs); obj = virNodeDeviceObjListFindByNameLocked(devs, name); - virObjectRWUnlock(devs); + virObjectRWUnlockRead(devs); if (obj) virObjectLock(obj); @@ -462,7 +462,7 @@ virNodeDeviceObjListAssignDef(virNodeDeviceObjListPtr devs, } cleanup: - virObjectRWUnlock(devs); + virObjectRWUnlockWrite(devs); return obj; } @@ -484,7 +484,7 @@ virNodeDeviceObjListRemove(virNodeDeviceObjListPtr devs, virHashRemoveEntry(devs->objs, def->name); virObjectUnlock(obj); virObjectUnref(obj); - virObjectRWUnlock(devs); + virObjectRWUnlockWrite(devs); } @@ -724,7 +724,7 @@ virNodeDeviceObjListNumOfDevices(virNodeDeviceObjListPtr devs, virObjectRWLockRead(devs); virHashForEach(devs->objs, virNodeDeviceObjListNumOfDevicesCallback, &data); - virObjectRWUnlock(devs); + virObjectRWUnlockRead(devs); return data.count; } @@ -784,7 +784,7 @@ virNodeDeviceObjListGetNames(virNodeDeviceObjListPtr devs, virObjectRWLockRead(devs); virHashForEach(devs->objs, virNodeDeviceObjListGetNamesCallback, &data); - virObjectRWUnlock(devs); + virObjectRWUnlockRead(devs); if (data.error) goto error; @@ -896,12 +896,12 @@ virNodeDeviceObjListExport(virConnectPtr conn, virObjectRWLockRead(devs); if (devices && VIR_ALLOC_N(data.devices, virHashSize(devs->objs) + 1) < 0) { - virObjectRWUnlock(devs); + virObjectRWUnlockRead(devs); return -1; } virHashForEach(devs->objs, virNodeDeviceObjListExportCallback, &data); - virObjectRWUnlock(devs); + virObjectRWUnlockRead(devs); if (data.error) goto cleanup; diff --git a/src/conf/virnwfilterbindingobjlist.c b/src/conf/virnwfilterbindingobjlist.c index 97e4d3c49b..64b75a0cc3 100644 --- a/src/conf/virnwfilterbindingobjlist.c +++ b/src/conf/virnwfilterbindingobjlist.c @@ -115,7 +115,7 @@ virNWFilterBindingObjListFindByPortDev(virNWFilterBindingObjListPtr bindings, virObjectRWLockRead(bindings); obj = virNWFilterBindingObjListFindByPortDevLocked(bindings, name); - virObjectRWUnlock(bindings); + virObjectRWUnlockRead(bindings); if (obj && virNWFilterBindingObjGetRemoving(obj)) { virObjectUnlock(obj); @@ -212,7 +212,7 @@ virNWFilterBindingObjListAdd(virNWFilterBindingObjListPtr bindings, virObjectRWLockWrite(bindings); ret = virNWFilterBindingObjListAddLocked(bindings, def); - virObjectRWUnlock(bindings); + virObjectRWUnlockWrite(bindings); return ret; } @@ -256,7 +256,7 @@ virNWFilterBindingObjListRemove(virNWFilterBindingObjListPtr bindings, virObjectLock(binding); virNWFilterBindingObjListRemoveLocked(bindings, binding); virObjectUnref(binding); - virObjectRWUnlock(bindings); + virObjectRWUnlockWrite(bindings); } @@ -331,7 +331,7 @@ virNWFilterBindingObjListLoadAllConfigs(virNWFilterBindingObjListPtr bindings, } VIR_DIR_CLOSE(dir); - virObjectRWUnlock(bindings); + virObjectRWUnlockWrite(bindings); return ret; } @@ -366,7 +366,7 @@ virNWFilterBindingObjListForEach(virNWFilterBindingObjListPtr bindings, }; virObjectRWLockRead(bindings); virHashForEach(bindings->objs, virNWFilterBindingObjListHelper, &data); - virObjectRWUnlock(bindings); + virObjectRWUnlockRead(bindings); return data.ret; } @@ -435,12 +435,12 @@ virNWFilterBindingObjListCollect(virNWFilterBindingObjListPtr domlist, virObjectRWLockRead(domlist); sa_assert(domlist->objs); if (VIR_ALLOC_N(data.bindings, virHashSize(domlist->objs)) < 0) { - virObjectRWUnlock(domlist); + virObjectRWUnlockRead(domlist); return -1; } virHashForEach(domlist->objs, virNWFilterBindingObjListCollectIterator, &data); - virObjectRWUnlock(domlist); + virObjectRWUnlockRead(domlist); virNWFilterBindingObjListFilter(&data.bindings, &data.nbindings, conn, filter); diff --git a/src/conf/virsecretobj.c b/src/conf/virsecretobj.c index 81c9f2c346..77cf03ad74 100644 --- a/src/conf/virsecretobj.c +++ b/src/conf/virsecretobj.c @@ -188,7 +188,7 @@ virSecretObjListFindByUUID(virSecretObjListPtr secrets, virObjectRWLockRead(secrets); obj = virSecretObjListFindByUUIDLocked(secrets, uuidstr); - virObjectRWUnlock(secrets); + virObjectRWUnlockRead(secrets); if (obj) virObjectLock(obj); return obj; @@ -267,7 +267,7 @@ virSecretObjListFindByUsage(virSecretObjListPtr secrets, virObjectRWLockRead(secrets); obj = virSecretObjListFindByUsageLocked(secrets, usageType, usageID); - virObjectRWUnlock(secrets); + virObjectRWUnlockRead(secrets); if (obj) virObjectLock(obj); return obj; @@ -303,7 +303,7 @@ virSecretObjListRemove(virSecretObjListPtr secrets, virHashRemoveEntry(secrets->objs, uuidstr); virObjectUnlock(obj); virObjectUnref(obj); - virObjectRWUnlock(secrets); + virObjectRWUnlockWrite(secrets); } @@ -397,7 +397,7 @@ virSecretObjListAdd(virSecretObjListPtr secrets, cleanup: virSecretObjEndAPI(&obj); - virObjectRWUnlock(secrets); + virObjectRWUnlockWrite(secrets); return ret; } @@ -490,7 +490,7 @@ virSecretObjListNumOfSecrets(virSecretObjListPtr secrets, virObjectRWLockRead(secrets); virHashForEach(secrets->objs, virSecretObjListNumOfSecretsCallback, &data); - virObjectRWUnlock(secrets); + virObjectRWUnlockRead(secrets); return data.count; } @@ -592,12 +592,12 @@ virSecretObjListExport(virConnectPtr conn, virObjectRWLockRead(secretobjs); if (secrets && VIR_ALLOC_N(data.secrets, virHashSize(secretobjs->objs) + 1) < 0) { - virObjectRWUnlock(secretobjs); + virObjectRWUnlockRead(secretobjs); return -1; } virHashForEach(secretobjs->objs, virSecretObjListExportCallback, &data); - virObjectRWUnlock(secretobjs); + virObjectRWUnlockRead(secretobjs); if (data.error) goto error; @@ -629,7 +629,7 @@ virSecretObjListGetUUIDs(virSecretObjListPtr secrets, virObjectRWLockRead(secrets); virHashForEach(secrets->objs, virSecretObjListGetUUIDsCallback, &data); - virObjectRWUnlock(secrets); + virObjectRWUnlockRead(secrets); if (data.error) goto error; diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c index 5cbd30f93c..2f1e9e72aa 100644 --- a/src/conf/virstorageobj.c +++ b/src/conf/virstorageobj.c @@ -515,7 +515,7 @@ virStoragePoolObjListSearch(virStoragePoolObjListPtr pools, virObjectRWLockRead(pools); obj = virHashSearch(pools->objs, virStoragePoolObjListSearchCb, &data, NULL); - virObjectRWUnlock(pools); + virObjectRWUnlockRead(pools); return virObjectRef(obj); } @@ -535,7 +535,7 @@ virStoragePoolObjRemove(virStoragePoolObjListPtr pools, virHashRemoveEntry(pools->objs, uuidstr); virHashRemoveEntry(pools->objsName, obj->def->name); virObjectUnref(obj); - virObjectRWUnlock(pools); + virObjectRWUnlockWrite(pools); } @@ -568,7 +568,7 @@ virStoragePoolObjFindByUUID(virStoragePoolObjListPtr pools, virObjectRWLockRead(pools); obj = virStoragePoolObjFindByUUIDLocked(pools, uuid); - virObjectRWUnlock(pools); + virObjectRWUnlockRead(pools); if (obj) virObjectLock(obj); @@ -601,7 +601,7 @@ virStoragePoolObjFindByName(virStoragePoolObjListPtr pools, virObjectRWLockRead(pools); obj = virStoragePoolObjFindByNameLocked(pools, name); - virObjectRWUnlock(pools); + virObjectRWUnlockRead(pools); if (obj) virObjectLock(obj); @@ -668,13 +668,13 @@ virStoragePoolObjAddVol(virStoragePoolObjPtr obj, virObjectRef(volobj); volobj->voldef = voldef; - virObjectRWUnlock(volumes); + virObjectRWUnlockWrite(volumes); virStorageVolObjEndAPI(&volobj); return 0; error: virStorageVolObjEndAPI(&volobj); - virObjectRWUnlock(volumes); + virObjectRWUnlockWrite(volumes); return -1; } @@ -691,7 +691,7 @@ virStoragePoolObjRemoveVol(virStoragePoolObjPtr obj, if (!volobj) { VIR_INFO("Cannot find volume '%s' from storage pool '%s'", voldef->name, obj->def->name); - virObjectRWUnlock(volumes); + virObjectRWUnlockWrite(volumes); return; } VIR_INFO("Deleting volume '%s' from storage pool '%s'", @@ -704,7 +704,7 @@ virStoragePoolObjRemoveVol(virStoragePoolObjPtr obj, virHashRemoveEntry(volumes->objsPath, voldef->target.path); virStorageVolObjEndAPI(&volobj); - virObjectRWUnlock(volumes); + virObjectRWUnlockWrite(volumes); } @@ -715,7 +715,7 @@ virStoragePoolObjGetVolumesCount(virStoragePoolObjPtr obj) virObjectRWLockRead(obj->volumes); nbElems = virHashSize(obj->volumes->objsKey); - virObjectRWUnlock(obj->volumes); + virObjectRWUnlockRead(obj->volumes); return nbElems; } @@ -755,7 +755,7 @@ virStoragePoolObjForEachVolume(virStoragePoolObjPtr obj, virObjectRWLockRead(obj->volumes); virHashForEach(obj->volumes->objsKey, virStoragePoolObjForEachVolumeCb, &data); - virObjectRWUnlock(obj->volumes); + virObjectRWUnlockRead(obj->volumes); return 0; } @@ -797,7 +797,7 @@ virStoragePoolObjSearchVolume(virStoragePoolObjPtr obj, volobj = virHashSearch(obj->volumes->objsKey, virStoragePoolObjSearchVolumeCb, &data, NULL); - virObjectRWUnlock(obj->volumes); + virObjectRWUnlockRead(obj->volumes); if (volobj) return volobj->voldef; @@ -814,7 +814,7 @@ virStorageVolDefFindByKey(virStoragePoolObjPtr obj, virObjectRWLockRead(obj->volumes); volobj = virHashLookup(obj->volumes->objsKey, key); - virObjectRWUnlock(obj->volumes); + virObjectRWUnlockRead(obj->volumes); if (volobj) return volobj->voldef; @@ -830,7 +830,7 @@ virStorageVolDefFindByPath(virStoragePoolObjPtr obj, virObjectRWLockRead(obj->volumes); volobj = virHashLookup(obj->volumes->objsPath, path); - virObjectRWUnlock(obj->volumes); + virObjectRWUnlockRead(obj->volumes); if (volobj) return volobj->voldef; @@ -846,7 +846,7 @@ virStorageVolDefFindByName(virStoragePoolObjPtr obj, virObjectRWLockRead(obj->volumes); volobj = virHashLookup(obj->volumes->objsName, name); - virObjectRWUnlock(obj->volumes); + virObjectRWUnlockRead(obj->volumes); if (volobj) return volobj->voldef; @@ -895,7 +895,7 @@ virStoragePoolObjNumOfVolumes(virStoragePoolObjPtr obj, virObjectRWLockRead(volumes); virHashForEach(volumes->objsName, virStoragePoolObjNumOfVolumesCb, &data); - virObjectRWUnlock(volumes); + virObjectRWUnlockRead(volumes); return data.count; } @@ -956,7 +956,7 @@ virStoragePoolObjVolumeGetNames(virStoragePoolObjPtr obj, virObjectRWLockRead(volumes); virHashForEach(volumes->objsName, virStoragePoolObjVolumeGetNamesCb, &data); - virObjectRWUnlock(volumes); + virObjectRWUnlockRead(volumes); if (data.error) goto error; @@ -1032,17 +1032,17 @@ virStoragePoolObjVolumeListExport(virConnectPtr conn, if (!vols) { int ret = virHashSize(volumes->objsName); - virObjectRWUnlock(volumes); + virObjectRWUnlockRead(volumes); return ret; } if (VIR_ALLOC_N(data.vols, virHashSize(volumes->objsName) + 1) < 0) { - virObjectRWUnlock(volumes); + virObjectRWUnlockRead(volumes); return -1; } virHashForEach(volumes->objsName, virStoragePoolObjVolumeListExportCallback, &data); - virObjectRWUnlock(volumes); + virObjectRWUnlockRead(volumes); if (data.error) goto error; @@ -1584,7 +1584,7 @@ virStoragePoolObjListAdd(virStoragePoolObjListPtr pools, goto error; if (rc > 0) { virStoragePoolObjAssignDef(obj, def, flags); - virObjectRWUnlock(pools); + virObjectRWUnlockWrite(pools); return obj; } @@ -1602,12 +1602,12 @@ virStoragePoolObjListAdd(virStoragePoolObjListPtr pools, } virObjectRef(obj); obj->def = def; - virObjectRWUnlock(pools); + virObjectRWUnlockWrite(pools); return obj; error: virStoragePoolObjEndAPI(&obj); - virObjectRWUnlock(pools); + virObjectRWUnlockWrite(pools); return NULL; } @@ -1867,7 +1867,7 @@ virStoragePoolObjNumOfStoragePools(virStoragePoolObjListPtr pools, virObjectRWLockRead(pools); virHashForEach(pools->objs, virStoragePoolObjNumOfStoragePoolsCb, &data); - virObjectRWUnlock(pools); + virObjectRWUnlockRead(pools); return data.count; } @@ -1931,7 +1931,7 @@ virStoragePoolObjGetNames(virStoragePoolObjListPtr pools, virObjectRWLockRead(pools); virHashForEach(pools->objs, virStoragePoolObjGetNamesCb, &data); - virObjectRWUnlock(pools); + virObjectRWUnlockRead(pools); if (data.error) goto error; @@ -2081,7 +2081,7 @@ virStoragePoolObjListExport(virConnectPtr conn, goto error; virHashForEach(poolobjs->objs, virStoragePoolObjListExportCallback, &data); - virObjectRWUnlock(poolobjs); + virObjectRWUnlockRead(poolobjs); if (data.error) goto error; diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index c95c1a078c..c2abbf65c2 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2745,7 +2745,8 @@ virObjectRef; virObjectRWLockableNew; virObjectRWLockRead; virObjectRWLockWrite; -virObjectRWUnlock; +virObjectRWUnlockRead; +virObjectRWUnlockWrite; virObjectUnlock; virObjectUnref; diff --git a/src/util/virobject.c b/src/util/virobject.c index c71781550f..aee1bb4af6 100644 --- a/src/util/virobject.c +++ b/src/util/virobject.c @@ -294,12 +294,7 @@ virObjectRWLockableNew(virClassPtr klass) if (!(obj = virObjectNew(klass))) return NULL; - if (virRWLockInit(&obj->lock) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to initialize RW lock")); - virObjectUnref(obj); - return NULL; - } + g_rw_lock_init(&obj->lock); return obj; } @@ -319,7 +314,7 @@ virObjectRWLockableDispose(void *anyobj) { virObjectRWLockablePtr obj = anyobj; - virRWLockDestroy(&obj->lock); + g_rw_lock_clear(&obj->lock); } @@ -458,7 +453,7 @@ virObjectRWLockRead(void *anyobj) if (!obj) return; - virRWLockRead(&obj->lock); + g_rw_lock_reader_lock(&obj->lock); } @@ -487,7 +482,7 @@ virObjectRWLockWrite(void *anyobj) if (!obj) return; - virRWLockWrite(&obj->lock); + g_rw_lock_writer_lock(&obj->lock); } @@ -518,16 +513,26 @@ virObjectUnlock(void *anyobj) * virObjectRWLockRead or virObjectRWLockWrite. */ void -virObjectRWUnlock(void *anyobj) +virObjectRWUnlockWrite(void *anyobj) { virObjectRWLockablePtr obj = virObjectGetRWLockableObj(anyobj); if (!obj) return; - virRWLockUnlock(&obj->lock); + g_rw_lock_writer_unlock(&obj->lock); } +void +virObjectRWUnlockRead(void *anyobj) +{ + virObjectRWLockablePtr obj = virObjectGetRWLockableObj(anyobj); + + if (!obj) + return; + + g_rw_lock_reader_unlock(&obj->lock); +} /** * virObjectIsClass: diff --git a/src/util/virobject.h b/src/util/virobject.h index 62a8a3d132..fcfe77578b 100644 --- a/src/util/virobject.h +++ b/src/util/virobject.h @@ -63,7 +63,7 @@ struct _virObjectLockable { struct _virObjectRWLockable { virObject parent; - virRWLock lock; + GRWLock lock; }; virClassPtr virClassForObject(void); @@ -150,7 +150,11 @@ virObjectUnlock(void *lockableobj) ATTRIBUTE_NONNULL(1); void -virObjectRWUnlock(void *lockableobj) +virObjectRWUnlockRead(void *lockableobj) + ATTRIBUTE_NONNULL(1); + +void +virObjectRWUnlockWrite(void *lockableobj) ATTRIBUTE_NONNULL(1); void -- 2.25.2