[libvirt PATCH v5 4/9] virobject: Introduce virObjectLockGuard

Tim Wiederhake posted 9 patches 4 years ago
[libvirt PATCH v5 4/9] virobject: Introduce virObjectLockGuard
Posted by Tim Wiederhake 4 years ago
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>
---
 src/libvirt_private.syms |  1 +
 src/util/virobject.c     | 16 ++++++++++++++++
 src/util/virobject.h     |  4 ++++
 3 files changed, 21 insertions(+)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 5da9874e17..9bc3d9530b 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2956,6 +2956,7 @@ virObjectListFree;
 virObjectListFreeCount;
 virObjectLock;
 virObjectLockableNew;
+virObjectLockGuard;
 virObjectNew;
 virObjectRef;
 virObjectRWLockableNew;
diff --git a/src/util/virobject.c b/src/util/virobject.c
index 588b41802c..74cc84205e 100644
--- a/src/util/virobject.c
+++ b/src/util/virobject.c
@@ -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
diff --git a/src/util/virobject.h b/src/util/virobject.h
index 1e34c77744..dc1ce66a4f 100644
--- a/src/util/virobject.h
+++ b/src/util/virobject.h
@@ -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);
-- 
2.31.1

Re: [libvirt PATCH v5 4/9] virobject: Introduce virObjectLockGuard
Posted by Daniel P. Berrangé 4 years ago
On Tue, Feb 01, 2022 at 02:20:12PM +0100, Tim Wiederhake wrote:
> 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>
> ---
>  src/libvirt_private.syms |  1 +
>  src/util/virobject.c     | 16 ++++++++++++++++
>  src/util/virobject.h     |  4 ++++
>  3 files changed, 21 insertions(+)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|