From d40430116b1b65d8deeeeea106368e20d8534a03 Mon Sep 17 00:00:00 2001 From: Hirokazu Honda Date: Sat, 3 Apr 2021 22:57:34 +0900 Subject: android: CameraDevice: Fix Camera3RequestDescriptor leakage CameraDevice creates Camera3RequestDescriptor in processCaptureRequest() and disallocates in requestComplete(). Camera3RequestDescriptor can never be destroyed if requestComplete() is never called. This avoid the memory leakage by storing them in map CameraRequestDescriptor. Signed-off-by: Hirokazu Honda Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi Signed-off-by: Laurent Pinchart --- src/android/camera_device.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/android/camera_device.h') diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 39cf95ad..c63e8e21 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -69,11 +70,13 @@ private: CameraDevice(unsigned int id, std::shared_ptr camera); struct Camera3RequestDescriptor { + Camera3RequestDescriptor() = default; + ~Camera3RequestDescriptor() = default; Camera3RequestDescriptor(libcamera::Camera *camera, const camera3_capture_request_t *camera3Request); - ~Camera3RequestDescriptor(); + Camera3RequestDescriptor &operator=(Camera3RequestDescriptor &&) = default; - uint32_t frameNumber_; + uint32_t frameNumber_ = 0; std::vector buffers_; std::vector> frameBuffers_; CameraMetadata settings_; @@ -124,6 +127,9 @@ private: std::map formatsMap_; std::vector streams_; + std::mutex mutex_; /* Protect descriptors_ */ + std::map descriptors_; + std::string maker_; std::string model_; -- cgit v1.2.1