[libcamera-devel] [PATCH v3 08/17] py: Use libcamera's Mutex classes

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Aug 18 21:21:51 CEST 2022


Hi Tomi,

Thank you for the patch.

On Fri, Jul 01, 2022 at 11:45:12AM +0300, Tomi Valkeinen wrote:
> Use libcamera's Mutex and MutexLocker instead of the std versions to get
> thread safety annotations.
> 
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>

Note that due to a recent change that made the mutex.h header private,
you will need to use libcamera_private instead of libcamera_public in
pycamera_deps in meson.build.

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> ---
>  src/py/libcamera/py_camera_manager.cpp | 4 ++--
>  src/py/libcamera/py_camera_manager.h   | 7 ++++---
>  2 files changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/src/py/libcamera/py_camera_manager.cpp b/src/py/libcamera/py_camera_manager.cpp
> index 3d422c9e..5600f661 100644
> --- a/src/py/libcamera/py_camera_manager.cpp
> +++ b/src/py/libcamera/py_camera_manager.cpp
> @@ -104,14 +104,14 @@ void PyCameraManager::readFd()
>  
>  void PyCameraManager::pushRequest(Request *req)
>  {
> -	std::lock_guard guard(completedRequestsMutex_);
> +	MutexLocker guard(completedRequestsMutex_);
>  	completedRequests_.push_back(req);
>  }
>  
>  std::vector<Request *> PyCameraManager::getCompletedRequests()
>  {
>  	std::vector<Request *> v;
> -	std::lock_guard guard(completedRequestsMutex_);
> +	MutexLocker guard(completedRequestsMutex_);
>  	swap(v, completedRequests_);
>  	return v;
>  }
> diff --git a/src/py/libcamera/py_camera_manager.h b/src/py/libcamera/py_camera_manager.h
> index 710163e8..56bea13d 100644
> --- a/src/py/libcamera/py_camera_manager.h
> +++ b/src/py/libcamera/py_camera_manager.h
> @@ -5,7 +5,7 @@
>  
>  #pragma once
>  
> -#include <mutex>
> +#include <libcamera/base/mutex.h>
>  
>  #include <libcamera/libcamera.h>
>  
> @@ -34,8 +34,9 @@ private:
>  	std::unique_ptr<CameraManager> cameraManager_;
>  
>  	UniqueFD eventFd_;
> -	std::mutex completedRequestsMutex_;
> -	std::vector<Request *> completedRequests_;
> +	libcamera::Mutex completedRequestsMutex_;
> +	std::vector<Request *> completedRequests_
> +		LIBCAMERA_TSA_GUARDED_BY(completedRequestsMutex_);
>  
>  	void writeFd();
>  	void readFd();

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list