[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 1/2] coroutine: Add qemu_co_mutex_assert_locked()
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
Re: [PATCH v2 1/2] coroutine: Add qemu_co_mutex_assert_locked() |
Date: |
Thu, 24 Oct 2019 15:35:53 +0000 |
24.10.2019 17:26, Kevin Wolf wrote:
> 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: address@hidden
> Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Vladimir Sementsov-Ogievskiy <address@hidden>
> ---
> include/qemu/coroutine.h | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
> index 9801e7f5a4..f4843b5f59 100644
> --- a/include/qemu/coroutine.h
> +++ b/include/qemu/coroutine.h
> @@ -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
>
--
Best regards,
Vladimir