mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-10 17:57:25 +03:00
conf: Split FindBy{UUID|Name} into locked helpers
Create helpers virDomainObjListFindByUUIDLocked and virDomainObjListFindByNameLocked to avoid the need to lock the domain object list leaving that task for the caller. Signed-off-by: John Ferlan <jferlan@redhat.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
This commit is contained in:
parent
5d84835e09
commit
cf5184d1e1
@ -133,19 +133,16 @@ virDomainObjListFindByID(virDomainObjListPtr doms,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
virDomainObjPtr
|
static virDomainObjPtr
|
||||||
virDomainObjListFindByUUID(virDomainObjListPtr doms,
|
virDomainObjListFindByUUIDLocked(virDomainObjListPtr doms,
|
||||||
const unsigned char *uuid)
|
const unsigned char *uuid)
|
||||||
{
|
{
|
||||||
char uuidstr[VIR_UUID_STRING_BUFLEN];
|
char uuidstr[VIR_UUID_STRING_BUFLEN];
|
||||||
virDomainObjPtr obj;
|
virDomainObjPtr obj;
|
||||||
|
|
||||||
virObjectRWLockRead(doms);
|
|
||||||
virUUIDFormat(uuid, uuidstr);
|
virUUIDFormat(uuid, uuidstr);
|
||||||
|
|
||||||
obj = virHashLookup(doms->objs, uuidstr);
|
obj = virHashLookup(doms->objs, uuidstr);
|
||||||
virObjectRef(obj);
|
virObjectRef(obj);
|
||||||
virObjectRWUnlock(doms);
|
|
||||||
if (obj) {
|
if (obj) {
|
||||||
virObjectLock(obj);
|
virObjectLock(obj);
|
||||||
if (obj->removing) {
|
if (obj->removing) {
|
||||||
@ -158,15 +155,36 @@ virDomainObjListFindByUUID(virDomainObjListPtr doms,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
virDomainObjPtr virDomainObjListFindByName(virDomainObjListPtr doms,
|
/**
|
||||||
const char *name)
|
* @doms: Domain object list
|
||||||
|
* @uuid: UUID to search the doms->objs table
|
||||||
|
*
|
||||||
|
* Lookup the @uuid in the doms->objs hash table and return a
|
||||||
|
* locked and ref counted domain object if found. Caller is
|
||||||
|
* expected to use the virDomainObjEndAPI when done with the object.
|
||||||
|
*/
|
||||||
|
virDomainObjPtr
|
||||||
|
virDomainObjListFindByUUID(virDomainObjListPtr doms,
|
||||||
|
const unsigned char *uuid)
|
||||||
{
|
{
|
||||||
virDomainObjPtr obj;
|
virDomainObjPtr obj;
|
||||||
|
|
||||||
virObjectRWLockRead(doms);
|
virObjectRWLockRead(doms);
|
||||||
|
obj = virDomainObjListFindByUUIDLocked(doms, uuid);
|
||||||
|
virObjectRWUnlock(doms);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static virDomainObjPtr
|
||||||
|
virDomainObjListFindByNameLocked(virDomainObjListPtr doms,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
virDomainObjPtr obj;
|
||||||
|
|
||||||
obj = virHashLookup(doms->objsName, name);
|
obj = virHashLookup(doms->objsName, name);
|
||||||
virObjectRef(obj);
|
virObjectRef(obj);
|
||||||
virObjectRWUnlock(doms);
|
|
||||||
if (obj) {
|
if (obj) {
|
||||||
virObjectLock(obj);
|
virObjectLock(obj);
|
||||||
if (obj->removing) {
|
if (obj->removing) {
|
||||||
@ -179,6 +197,28 @@ virDomainObjPtr virDomainObjListFindByName(virDomainObjListPtr doms,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @doms: Domain object list
|
||||||
|
* @name: Name to search the doms->objsName table
|
||||||
|
*
|
||||||
|
* Lookup the @name in the doms->objsName hash table and return a
|
||||||
|
* locked and ref counted domain object if found. Caller is expected
|
||||||
|
* to use the virDomainObjEndAPI when done with the object.
|
||||||
|
*/
|
||||||
|
virDomainObjPtr
|
||||||
|
virDomainObjListFindByName(virDomainObjListPtr doms,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
virDomainObjPtr obj;
|
||||||
|
|
||||||
|
virObjectRWLockRead(doms);
|
||||||
|
obj = virDomainObjListFindByNameLocked(doms, name);
|
||||||
|
virObjectRWUnlock(doms);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @doms: Domain object list pointer
|
* @doms: Domain object list pointer
|
||||||
* @vm: Domain object to be added
|
* @vm: Domain object to be added
|
||||||
|
Loading…
x
Reference in New Issue
Block a user