[libcamera-devel,v5,03/12] v4l2: Consolidate mutex classes to Mutex and MutexLocker
diff mbox series

Message ID 20211201075348.3121186-4-hiroh@chromium.org
State Accepted
Headers show
Series
  • Introduce clang thread safety annotations
Related show

Commit Message

Hirokazu Honda Dec. 1, 2021, 7:53 a.m. UTC
std::mutex and std::unique_lock are used in v4l2 directory,
mixing Mutex and MutexLocker. This consolidates them to Mutex
and MutexLocker.

This also fixes vidioc_dqbuf argument to take Mutex instead of
MutexLocker.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/v4l2/v4l2_camera.h         | 4 ++--
 src/v4l2/v4l2_camera_proxy.cpp | 8 ++++----
 src/v4l2/v4l2_camera_proxy.h   | 4 +++-
 3 files changed, 9 insertions(+), 7 deletions(-)

Comments

Umang Jain Dec. 1, 2021, 10:26 a.m. UTC | #1
Hi Hiro,

Thank you for the patch.

On 12/1/21 1:23 PM, Hirokazu Honda wrote:
> std::mutex and std::unique_lock are used in v4l2 directory,
> mixing Mutex and MutexLocker. This consolidates them to Mutex
> and MutexLocker.
>
> This also fixes vidioc_dqbuf argument to take Mutex instead of
> MutexLocker.
>
> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>


Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>

> ---
>   src/v4l2/v4l2_camera.h         | 4 ++--
>   src/v4l2/v4l2_camera_proxy.cpp | 8 ++++----
>   src/v4l2/v4l2_camera_proxy.h   | 4 +++-
>   3 files changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/src/v4l2/v4l2_camera.h b/src/v4l2/v4l2_camera.h
> index 4afbb331..bf1b6de4 100644
> --- a/src/v4l2/v4l2_camera.h
> +++ b/src/v4l2/v4l2_camera.h
> @@ -8,10 +8,10 @@
>   #pragma once
>   
>   #include <deque>
> -#include <mutex>
>   #include <utility>
>   
>   #include <libcamera/base/semaphore.h>
> +#include <libcamera/base/thread.h>
>   
>   #include <libcamera/camera.h>
>   #include <libcamera/file_descriptor.h>
> @@ -71,7 +71,7 @@ private:
>   
>   	bool isRunning_;
>   
> -	std::mutex bufferLock_;
> +	libcamera::Mutex bufferLock_;
>   	libcamera::FrameBufferAllocator *bufferAllocator_;
>   
>   	std::vector<std::unique_ptr<libcamera::Request>> requestPool_;
> diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp
> index 3610e63c..79bc880d 100644
> --- a/src/v4l2/v4l2_camera_proxy.cpp
> +++ b/src/v4l2/v4l2_camera_proxy.cpp
> @@ -575,7 +575,7 @@ int V4L2CameraProxy::vidioc_qbuf(V4L2CameraFile *file, struct v4l2_buffer *arg)
>   }
>   
>   int V4L2CameraProxy::vidioc_dqbuf(V4L2CameraFile *file, struct v4l2_buffer *arg,
> -				  MutexLocker *locker)
> +				  Mutex *lock)
>   {
>   	LOG(V4L2Compat, Debug) << "Servicing vidioc_dqbuf fd = " << file->efd();
>   
> @@ -593,9 +593,9 @@ int V4L2CameraProxy::vidioc_dqbuf(V4L2CameraFile *file, struct v4l2_buffer *arg,
>   		return -EINVAL;
>   
>   	if (!file->nonBlocking()) {
> -		locker->unlock();
> +		lock->unlock();
>   		vcam_->waitForBufferAvailable();
> -		locker->lock();
> +		lock->lock();
>   	} else if (!vcam_->isBufferAvailable())
>   		return -EAGAIN;
>   
> @@ -753,7 +753,7 @@ int V4L2CameraProxy::ioctl(V4L2CameraFile *file, unsigned long request, void *ar
>   		ret = vidioc_qbuf(file, static_cast<struct v4l2_buffer *>(arg));
>   		break;
>   	case VIDIOC_DQBUF:
> -		ret = vidioc_dqbuf(file, static_cast<struct v4l2_buffer *>(arg), &locker);
> +		ret = vidioc_dqbuf(file, static_cast<struct v4l2_buffer *>(arg), &proxyMutex_);
>   		break;
>   	case VIDIOC_STREAMON:
>   		ret = vidioc_streamon(file, static_cast<int *>(arg));
> diff --git a/src/v4l2/v4l2_camera_proxy.h b/src/v4l2/v4l2_camera_proxy.h
> index fccec241..040954dd 100644
> --- a/src/v4l2/v4l2_camera_proxy.h
> +++ b/src/v4l2/v4l2_camera_proxy.h
> @@ -14,6 +14,8 @@
>   #include <sys/types.h>
>   #include <vector>
>   
> +#include <libcamera/base/thread.h>
> +
>   #include <libcamera/camera.h>
>   
>   #include "v4l2_camera.h"
> @@ -57,7 +59,7 @@ private:
>   	int vidioc_querybuf(V4L2CameraFile *file, struct v4l2_buffer *arg);
>   	int vidioc_qbuf(V4L2CameraFile *file, struct v4l2_buffer *arg);
>   	int vidioc_dqbuf(V4L2CameraFile *file, struct v4l2_buffer *arg,
> -			 libcamera::MutexLocker *locker);
> +			 libcamera::Mutex *lock);
>   	int vidioc_streamon(V4L2CameraFile *file, int *arg);
>   	int vidioc_streamoff(V4L2CameraFile *file, int *arg);
>

Patch
diff mbox series

diff --git a/src/v4l2/v4l2_camera.h b/src/v4l2/v4l2_camera.h
index 4afbb331..bf1b6de4 100644
--- a/src/v4l2/v4l2_camera.h
+++ b/src/v4l2/v4l2_camera.h
@@ -8,10 +8,10 @@ 
 #pragma once
 
 #include <deque>
-#include <mutex>
 #include <utility>
 
 #include <libcamera/base/semaphore.h>
+#include <libcamera/base/thread.h>
 
 #include <libcamera/camera.h>
 #include <libcamera/file_descriptor.h>
@@ -71,7 +71,7 @@  private:
 
 	bool isRunning_;
 
-	std::mutex bufferLock_;
+	libcamera::Mutex bufferLock_;
 	libcamera::FrameBufferAllocator *bufferAllocator_;
 
 	std::vector<std::unique_ptr<libcamera::Request>> requestPool_;
diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp
index 3610e63c..79bc880d 100644
--- a/src/v4l2/v4l2_camera_proxy.cpp
+++ b/src/v4l2/v4l2_camera_proxy.cpp
@@ -575,7 +575,7 @@  int V4L2CameraProxy::vidioc_qbuf(V4L2CameraFile *file, struct v4l2_buffer *arg)
 }
 
 int V4L2CameraProxy::vidioc_dqbuf(V4L2CameraFile *file, struct v4l2_buffer *arg,
-				  MutexLocker *locker)
+				  Mutex *lock)
 {
 	LOG(V4L2Compat, Debug) << "Servicing vidioc_dqbuf fd = " << file->efd();
 
@@ -593,9 +593,9 @@  int V4L2CameraProxy::vidioc_dqbuf(V4L2CameraFile *file, struct v4l2_buffer *arg,
 		return -EINVAL;
 
 	if (!file->nonBlocking()) {
-		locker->unlock();
+		lock->unlock();
 		vcam_->waitForBufferAvailable();
-		locker->lock();
+		lock->lock();
 	} else if (!vcam_->isBufferAvailable())
 		return -EAGAIN;
 
@@ -753,7 +753,7 @@  int V4L2CameraProxy::ioctl(V4L2CameraFile *file, unsigned long request, void *ar
 		ret = vidioc_qbuf(file, static_cast<struct v4l2_buffer *>(arg));
 		break;
 	case VIDIOC_DQBUF:
-		ret = vidioc_dqbuf(file, static_cast<struct v4l2_buffer *>(arg), &locker);
+		ret = vidioc_dqbuf(file, static_cast<struct v4l2_buffer *>(arg), &proxyMutex_);
 		break;
 	case VIDIOC_STREAMON:
 		ret = vidioc_streamon(file, static_cast<int *>(arg));
diff --git a/src/v4l2/v4l2_camera_proxy.h b/src/v4l2/v4l2_camera_proxy.h
index fccec241..040954dd 100644
--- a/src/v4l2/v4l2_camera_proxy.h
+++ b/src/v4l2/v4l2_camera_proxy.h
@@ -14,6 +14,8 @@ 
 #include <sys/types.h>
 #include <vector>
 
+#include <libcamera/base/thread.h>
+
 #include <libcamera/camera.h>
 
 #include "v4l2_camera.h"
@@ -57,7 +59,7 @@  private:
 	int vidioc_querybuf(V4L2CameraFile *file, struct v4l2_buffer *arg);
 	int vidioc_qbuf(V4L2CameraFile *file, struct v4l2_buffer *arg);
 	int vidioc_dqbuf(V4L2CameraFile *file, struct v4l2_buffer *arg,
-			 libcamera::MutexLocker *locker);
+			 libcamera::Mutex *lock);
 	int vidioc_streamon(V4L2CameraFile *file, int *arg);
 	int vidioc_streamoff(V4L2CameraFile *file, int *arg);