diff options
author | Umang Jain <email@uajain.com> | 2020-07-31 18:14:20 +0000 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-07-31 23:33:38 +0300 |
commit | f2df5abe5db9da36d4f07192a037acbcda2dee02 (patch) | |
tree | cf2dc801600075dc9d3c88fdfaee9bbd2281a8f5 /include | |
parent | 9c5f82139689a0133f8c253100762511af2e3a6e (diff) |
libcamera: camera: Ensure deletion via deleteLater()
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 libcamera
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 libcamera 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@uajain.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/libcamera/camera.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h index 4d1a4a9f..7dd23d75 100644 --- a/include/libcamera/camera.h +++ b/include/libcamera/camera.h @@ -13,6 +13,7 @@ #include <string> #include <libcamera/controls.h> +#include <libcamera/object.h> #include <libcamera/request.h> #include <libcamera/signal.h> #include <libcamera/stream.h> @@ -66,7 +67,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> { public: static std::shared_ptr<Camera> create(PipelineHandler *pipe, |