]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virobject: Introduce virObjectLockGuard
authorTim Wiederhake <twiederh@redhat.com>
Mon, 23 Aug 2021 14:03:54 +0000 (16:03 +0200)
committerTim Wiederhake <twiederh@redhat.com>
Tue, 1 Feb 2022 16:19:38 +0000 (17:19 +0100)
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>
src/libvirt_private.syms
src/util/virobject.c
src/util/virobject.h

index 5da9874e17ed6c8d5ebae334d113ce74f52ae421..9bc3d9530b345d21d7b2a23ba4532d8084578089 100644 (file)
@@ -2956,6 +2956,7 @@ virObjectListFree;
 virObjectListFreeCount;
 virObjectLock;
 virObjectLockableNew;
+virObjectLockGuard;
 virObjectNew;
 virObjectRef;
 virObjectRWLockableNew;
index 588b41802c3dccfc18e289aa22f4f18eb55878e8..74cc84205ea347175b95f51417e6abcc4f17f1f6 100644 (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
index 1e34c77744c203877fd55b2c43111d841840108f..dc1ce66a4f2179522328bcd99dca3204c4e3a314 100644 (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);