[libcamera-devel] [PATCH 2/2] libcamera: camera: Ensure deletion via deleteLater()
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Jul 28 17:25:44 CEST 2020
Hi Umang,
Thank you for the patch.
On Tue, Jul 28, 2020 at 10:57:25AM +0000, Umang Jain wrote:
> Object::deleteLater() ensures that the deletion of the Object
> takes place in a thread it is bound to. Deleting the Object
> in a different thread is a violation according to the threading
> model.
>
> On hot-unplug of a currently streaming camera, the last reference
> of Camera when dropped from the application thread (for e.g. QCam's
> thread), the destructor is then called from this thread. This is not
> allowed by the threading model. Camera is meant to be deleted in the
> thread it is bound to - in this case the CameraManager's thread.
>
> Signed-off-by: Umang Jain <email at uajain.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> include/libcamera/camera.h | 2 +-
> src/libcamera/camera.cpp | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h
> index 4d1a4a9..beb87e6 100644
> --- a/include/libcamera/camera.h
> +++ b/include/libcamera/camera.h
> @@ -66,7 +66,7 @@ protected:
> std::vector<StreamConfiguration> config_;
> };
>
> -class Camera final : public std::enable_shared_from_this<Camera>
> +class Camera final : public Object, public std::enable_shared_from_this<Camera>
You should include object.h at the top of the file.
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> {
> public:
> static std::shared_ptr<Camera> create(PipelineHandler *pipe,
> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
> index 69a1b44..034f341 100644
> --- a/src/libcamera/camera.cpp
> +++ b/src/libcamera/camera.cpp
> @@ -464,7 +464,7 @@ std::shared_ptr<Camera> Camera::create(PipelineHandler *pipe,
> struct Deleter : std::default_delete<Camera> {
> void operator()(Camera *camera)
> {
> - delete camera;
> + camera->deleteLater();
> }
> };
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list