mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 03:21:19 +00:00
virthread: Introduce VIR_WITH_MUTEX_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
d00d078968
commit
2075195d70
@ -209,3 +209,24 @@ int virThreadLocalSet(virThreadLocal *l, void*) G_GNUC_WARN_UNUSED_RESULT;
|
|||||||
return 0; \
|
return 0; \
|
||||||
} \
|
} \
|
||||||
struct classname ## EatSemicolon
|
struct classname ## EatSemicolon
|
||||||
|
|
||||||
|
#define VIR_WITH_MUTEX_LOCK_GUARD_(m, name) \
|
||||||
|
for (g_auto(virLockGuard) name = virLockGuardLock(m); name.mutex; \
|
||||||
|
name.mutex = (virLockGuardUnlock(&name), NULL))
|
||||||
|
/**
|
||||||
|
* VIR_WITH_MUTEX_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.
|
||||||
|
*
|
||||||
|
* virMutex *mutex = ...;
|
||||||
|
*
|
||||||
|
* VIR_WITH_MUTEX_LOCK_GUARD(mutex) {
|
||||||
|
* // `mutex` is locked, and released automatically on scope exit
|
||||||
|
* ...
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
#define VIR_WITH_MUTEX_LOCK_GUARD(m) \
|
||||||
|
VIR_WITH_MUTEX_LOCK_GUARD_(m, CONCAT(var, __COUNTER__))
|
||||||
|
Loading…
Reference in New Issue
Block a user