[libcamera-devel] [PATCH v1.1 2/4] libcamera: camera_manager: Use std::unique_ptr to store event dispatcher
Jacopo Mondi
jacopo at jmondi.org
Fri Jan 18 16:42:08 CET 2019
Hi Laurent,
On Fri, Jan 18, 2019 at 05:31:17PM +0200, Laurent Pinchart wrote:
> Hi Jacopo,
>
> On Fri, Jan 18, 2019 at 04:15:03PM +0100, Jacopo Mondi wrote:
> > On Fri, Jan 18, 2019 at 02:32:01AM +0200, Laurent Pinchart wrote:
> > > The CameraManager takes ownership of the dispatcher passed to the
> > > setEventDispatcher() function. Enforces this by using std::unique_ptr<>.
> > >
> > > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > > ---
> > > Changes since v1:
> > >
> > > - Use make_unique<> in CameraManager::setEventDispatcher()
> > > ---
> > > include/libcamera/camera_manager.h | 4 ++--
> > > src/libcamera/camera_manager.cpp | 12 +++++++-----
> > > 2 files changed, 9 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h
> > > index 6cfcba3c3933..b82a8ce95b9f 100644
> > > --- a/include/libcamera/camera_manager.h
> > > +++ b/include/libcamera/camera_manager.h
> > > @@ -29,7 +29,7 @@ public:
> > >
> > > static CameraManager *instance();
> > >
> > > - void setEventDispatcher(EventDispatcher *dispatcher);
> > > + void setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher);
> > > EventDispatcher *eventDispatcher();
> > >
> > > private:
> > > @@ -41,7 +41,7 @@ private:
> > > std::unique_ptr<DeviceEnumerator> enumerator_;
> > > std::vector<PipelineHandler *> pipes_;
> > >
> > > - EventDispatcher *dispatcher_;
> > > + std::unique_ptr<EventDispatcher> dispatcher_;
> > > };
> > >
> > > } /* namespace libcamera */
> > > diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp
> > > index 9f554be57e33..1430bb0d75a5 100644
> > > --- a/src/libcamera/camera_manager.cpp
> > > +++ b/src/libcamera/camera_manager.cpp
> > > @@ -12,6 +12,7 @@
> > > #include "event_dispatcher_poll.h"
> > > #include "log.h"
> > > #include "pipeline_handler.h"
> > > +#include "utils.h"
> > >
> > > /**
> > > * \file camera_manager.h
> > > @@ -58,7 +59,6 @@ CameraManager::CameraManager()
> > >
> > > CameraManager::~CameraManager()
> > > {
> > > - delete dispatcher_;
> > > }
> > >
> > > /**
> > > @@ -209,14 +209,14 @@ CameraManager *CameraManager::instance()
> > > * The CameraManager takes ownership of the event dispatcher and will delete it
> > > * when the application terminates.
> > > */
> > > -void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)
> > > +void CameraManager::setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher)
> > > {
> > > if (dispatcher_) {
> > > LOG(Warning) << "Event dispatcher is already set";
> > > return;
> > > }
> > >
> > > - dispatcher_ = dispatcher;
> > > + dispatcher_ = std::move(dispatcher);
> > > }
> > >
> > > /**
> > > @@ -226,14 +226,16 @@ void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)
> > > * If no dispatcher has been set, a default poll-based implementation is created
> > > * and returned, and no custom event dispatcher may be installed anymore.
> > > *
> > > + * The returned event dispatcher is valid until the camera manager is destroyed.
> > > + *
> > > * \return Pointer to the event dispatcher
> > > */
> > > EventDispatcher *CameraManager::eventDispatcher()
> > > {
> > > if (!dispatcher_)
> >
> > Does this access the resources owned by the unique_ptr<> ?
>
> If you mean does this check whether the pointer owned by the
> std::unique_ptr<> dispatch_ is null, then yes, it does, through operator
> bool:
>
> https://en.cppreference.com/w/cpp/memory/unique_ptr/operator_bool
>
> If you meant something else, then please rephrase the question :-)
That was my question :)
Thanks
j
>
> > > - dispatcher_ = new EventDispatcherPoll();
> > > + dispatcher_ = utils::make_unique<EventDispatcherPoll>();
> > >
> > > - return dispatcher_;
> > > + return dispatcher_.get();
> > > }
> > >
> > > } /* namespace libcamera */
>
> --
> Regards,
>
> Laurent Pinchart
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20190118/4e799b3d/attachment.sig>
More information about the libcamera-devel
mailing list