virobject: Introduce virObjectLockGuard

Typical usage:
    void foobar(virObjectLockable *obj)
    {
        VIR_LOCK_GUARD lock = virObjectLockGuard(obj);
        /* `obj` is locked, and released automatically on scope exit */

        ...
    }

Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Tim Wiederhake 2021-08-23 16:03:54 +02:00
parent 2075195d70
commit 8935c8397c
3 changed files with 21 additions and 0 deletions

View File

@ -2956,6 +2956,7 @@ virObjectListFree;
virObjectListFreeCount;
virObjectLock;
virObjectLockableNew;
virObjectLockGuard;
virObjectNew;
virObjectRef;
virObjectRWLockableNew;

View File

@ -426,6 +426,22 @@ virObjectGetRWLockableObj(void *anyobj)
}
/**
* virObjectLockGuard:
* @anyobj: any instance of virObjectLockable
*
* Acquire a lock on @anyobj that will be managed by the virLockGuard object
* returned to the caller.
*/
virLockGuard
virObjectLockGuard(void *anyobj)
{
virObjectLockable *obj = virObjectGetLockableObj(anyobj);
return virLockGuardLock(&obj->lock);
}
/**
* virObjectLock:
* @anyobj: any instance of virObjectLockable

View File

@ -118,6 +118,10 @@ void *
virObjectRWLockableNew(virClass *klass)
ATTRIBUTE_NONNULL(1);
virLockGuard
virObjectLockGuard(void *lockableobj)
ATTRIBUTE_NONNULL(1);
void
virObjectLock(void *lockableobj)
ATTRIBUTE_NONNULL(1);