[libcamera-devel] libcamera: camera_manager: Protect cameras_ by mutex in cleanup()
diff mbox series

Message ID 20220620055809.392808-1-umang.jain@ideasonboard.com
State Not Applicable
Delegated to: Umang Jain
Headers show
Series
  • [libcamera-devel] libcamera: camera_manager: Protect cameras_ by mutex in cleanup()
Related show

Commit Message

Umang Jain June 20, 2022, 5:58 a.m. UTC
From: Hirokazu Honda <hiroh@chromium.org>

CameraManager::Private::cleanup() accesses cameras_ without acquiring
mutex_. Fix it.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
---
 src/libcamera/camera_manager.cpp | 3 +++
 1 file changed, 3 insertions(+)

Comments

Laurent Pinchart June 20, 2022, 8:27 a.m. UTC | #1
Hi Umang,

Thank you for the patch.

On Mon, Jun 20, 2022 at 11:28:09AM +0530, Umang Jain via libcamera-devel wrote:
> From: Hirokazu Honda <hiroh@chromium.org>
> 
> CameraManager::Private::cleanup() accesses cameras_ without acquiring
> mutex_. Fix it.

Could you explain here why the lock is needed ?

> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
> ---
>  src/libcamera/camera_manager.cpp | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp
> index 70d73822..4492edc3 100644
> --- a/src/libcamera/camera_manager.cpp
> +++ b/src/libcamera/camera_manager.cpp
> @@ -178,7 +178,10 @@ void CameraManager::Private::cleanup()
>  	 * process deletion requests from the thread's message queue as the event
>  	 * loop is not in action here.
>  	 */
> +	mutex_.lock();
>  	cameras_.clear();
> +	mutex_.unlock();
> +
>  	dispatchMessages(Message::Type::DeferredDelete);
>  
>  	enumerator_.reset(nullptr);

Patch
diff mbox series

diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp
index 70d73822..4492edc3 100644
--- a/src/libcamera/camera_manager.cpp
+++ b/src/libcamera/camera_manager.cpp
@@ -178,7 +178,10 @@  void CameraManager::Private::cleanup()
 	 * process deletion requests from the thread's message queue as the event
 	 * loop is not in action here.
 	 */
+	mutex_.lock();
 	cameras_.clear();
+	mutex_.unlock();
+
 	dispatchMessages(Message::Type::DeferredDelete);
 
 	enumerator_.reset(nullptr);