coroutine: Add qemu_co_mutex_assert_locked()
Some functions require that the caller holds a certain CoMutex for them to operate correctly. Add a function so that they can assert the lock is really held. Cc: qemu-stable@nongnu.org Signed-off-by: Kevin Wolf <kwolf@redhat.com> Tested-by: Michael Weiser <michael.weiser@gmx.de> Reviewed-by: Michael Weiser <michael.weiser@gmx.de> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Denis V. Lunev <den@openvz.org> Reviewed-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
c9b749d7bc
commit
944f3d5dd2
@ -167,6 +167,21 @@ void coroutine_fn qemu_co_mutex_lock(CoMutex *mutex);
|
||||
*/
|
||||
void coroutine_fn qemu_co_mutex_unlock(CoMutex *mutex);
|
||||
|
||||
/**
|
||||
* Assert that the current coroutine holds @mutex.
|
||||
*/
|
||||
static inline coroutine_fn void qemu_co_mutex_assert_locked(CoMutex *mutex)
|
||||
{
|
||||
/*
|
||||
* mutex->holder doesn't need any synchronisation if the assertion holds
|
||||
* true because the mutex protects it. If it doesn't hold true, we still
|
||||
* don't mind if another thread takes or releases mutex behind our back,
|
||||
* because the condition will be false no matter whether we read NULL or
|
||||
* the pointer for any other coroutine.
|
||||
*/
|
||||
assert(atomic_read(&mutex->locked) &&
|
||||
mutex->holder == qemu_coroutine_self());
|
||||
}
|
||||
|
||||
/**
|
||||
* CoQueues are a mechanism to queue coroutines in order to continue executing
|
||||
|
Loading…
x
Reference in New Issue
Block a user