[libcamera-devel] [PATCH v2 08/11] android: camera_stream: Add thread safety annotation

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Nov 30 05:23:52 CET 2021


Hi Hiro,

Thank you for the patch.

On Mon, Nov 29, 2021 at 08:44:50PM +0900, Hirokazu Honda wrote:
> This applies clang thread safety annotation to CameraStream.
> 
> Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
> Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
> ---
>  src/android/camera_stream.cpp |  2 +-
>  src/android/camera_stream.h   | 11 +++++++----
>  2 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
> index 2181d094..ae659808 100644
> --- a/src/android/camera_stream.cpp
> +++ b/src/android/camera_stream.cpp
> @@ -275,7 +275,7 @@ void CameraStream::PostProcessorWorker::run()
>  	MutexLocker locker(mutex_);
>  
>  	while (1) {
> -		cv_.wait(locker, [&] {
> +		cv_.wait(locker, [&]() LIBCAMERA_TSA_REQUIRES(mutex_) {
>  			return state_ != State::Running || !requests_.empty();
>  		});
>  
> diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
> index c127a0e4..6737bd2d 100644
> --- a/src/android/camera_stream.h
> +++ b/src/android/camera_stream.h
> @@ -8,13 +8,14 @@
>  #pragma once
>  
>  #include <memory>
> -#include <mutex>
>  #include <queue>
>  #include <vector>
>  
>  #include <hardware/camera3.h>
>  
> +#include <libcamera/base/mutex.h>
>  #include <libcamera/base/thread.h>
> +#include <libcamera/base/thread_annotations.h>

I think this belongs to patch 02/11.

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

>  #include <libcamera/camera.h>
>  #include <libcamera/framebuffer.h>
> @@ -155,8 +156,10 @@ private:
>  		libcamera::Mutex mutex_;
>  		libcamera::ConditionVariable cv_;
>  
> -		std::queue<Camera3RequestDescriptor::StreamBuffer *> requests_;
> -		State state_ = State::Stopped;
> +		std::queue<Camera3RequestDescriptor::StreamBuffer *> requests_
> +			LIBCAMERA_TSA_GUARDED_BY(mutex_);
> +
> +		State state_ LIBCAMERA_TSA_GUARDED_BY(mutex_) = State::Stopped;
>  	};
>  
>  	int waitFence(int fence);
> @@ -168,7 +171,7 @@ private:
>  	const unsigned int index_;
>  
>  	std::unique_ptr<libcamera::FrameBufferAllocator> allocator_;
> -	std::vector<libcamera::FrameBuffer *> buffers_;
> +	std::vector<libcamera::FrameBuffer *> buffers_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
>  	/*
>  	 * The class has to be MoveConstructible as instances are stored in
>  	 * an std::vector in CameraDevice.

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list