[libcamera-devel] [PATCH] libcamera: base: Make MutexLocker(Mutex &mutex) non-blocking

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Apr 28 11:19:07 CEST 2022


Quoting Eric Curtin via libcamera-devel (2022-04-27 16:26:40)
> Camera::acquire claims to be non-blocking, in order to achieve this,
> std::unique_lock<std::mutex> constructor must be called with
> try_to_lock so it doesn't block if a lock cannot be obtained.
> 
> Bug: https://bugs.libcamera.org/show_bug.cgi?id=127
> Signed-off-by: Eric Curtin <ecurtin at redhat.com>
> ---
>  include/libcamera/base/mutex.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/libcamera/base/mutex.h b/include/libcamera/base/mutex.h
> index 2d23e49e..c4a5f791 100644
> --- a/include/libcamera/base/mutex.h
> +++ b/include/libcamera/base/mutex.h
> @@ -45,7 +45,7 @@ class LIBCAMERA_TSA_SCOPED_CAPABILITY MutexLocker final
>  {
>  public:
>         explicit MutexLocker(Mutex &mutex) LIBCAMERA_TSA_ACQUIRE(mutex)
> -               : lock_(mutex.mutex_)
> +               : lock_(mutex.mutex_, std::try_to_lock)

Does the code in question already call MutexLocker::try_lock(), but it
still blocks?

I.e. - does this just enable / allow calling lock_.try_lock() where
before callers would block regardless?

I can't quite grasp what the implications are here on other locations
that would like to block ... does it make all calls to lock()
non-blocking now? (even if they need it to be?)

https://en.cppreference.com/w/cpp/thread/lock_tag_t doesn't seem to make
it clear what the full effects are :-(

--
Kieran



>         {
>         }
>  
> -- 
> 2.35.1
>


More information about the libcamera-devel mailing list