mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
virobject: Introduce VIR_WITH_OBJECT_LOCK_GUARD
Modeled after "WITH_QEMU_LOCK_GUARD" (see qemu's include/qemu/lockable.h). See comment for typical usage. 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:
parent
8935c8397c
commit
6373a87315
@ -148,3 +148,25 @@ virObjectListFree(void *list);
|
||||
void
|
||||
virObjectListFreeCount(void *list,
|
||||
size_t count);
|
||||
|
||||
#define VIR_WITH_OBJECT_LOCK_GUARD_(o, name) \
|
||||
for (g_auto(virLockGuard) name = virObjectLockGuard(o); name.mutex; \
|
||||
name.mutex = (virLockGuardUnlock(&name), NULL))
|
||||
|
||||
/**
|
||||
* VIR_WITH_OBJECT_LOCK_GUARD:
|
||||
*
|
||||
* This macro defines a lock scope such that entering the scope takes the lock
|
||||
* and leaving the scope releases the lock. Return statements are allowed
|
||||
* within the scope and release the lock. Break and continue statements leave
|
||||
* the scope early and release the lock.
|
||||
*
|
||||
* virObjectLockable *lockable = ...;
|
||||
*
|
||||
* VIR_WITH_OBJECT_LOCK_GUARD(lockable) {
|
||||
* // `lockable` is locked, and released automatically on scope exit
|
||||
* ...
|
||||
* }
|
||||
*/
|
||||
#define VIR_WITH_OBJECT_LOCK_GUARD(o) \
|
||||
VIR_WITH_OBJECT_LOCK_GUARD_(o, CONCAT(var, __COUNTER__))
|
||||
|
Loading…
Reference in New Issue
Block a user