[{"id":407,"web_url":"https://patchwork.libcamera.org/comment/407/","msgid":"<20190118151503.gsuxa7kzlnnyfu7u@uno.localdomain>","date":"2019-01-18T15:15:03","subject":"Re: [libcamera-devel] [PATCH v1.1 2/4] libcamera: camera_manager:\n\tUse std::unique_ptr to store event dispatcher","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent,\n   one quick question\n\nOn Fri, Jan 18, 2019 at 02:32:01AM +0200, Laurent Pinchart wrote:\n> The CameraManager takes ownership of the dispatcher passed to the\n> setEventDispatcher() function. Enforces this by using std::unique_ptr<>.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n> Changes since v1:\n>\n> - Use make_unique<> in CameraManager::setEventDispatcher()\n> ---\n>  include/libcamera/camera_manager.h |  4 ++--\n>  src/libcamera/camera_manager.cpp   | 12 +++++++-----\n>  2 files changed, 9 insertions(+), 7 deletions(-)\n>\n> diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h\n> index 6cfcba3c3933..b82a8ce95b9f 100644\n> --- a/include/libcamera/camera_manager.h\n> +++ b/include/libcamera/camera_manager.h\n> @@ -29,7 +29,7 @@ public:\n>\n>  \tstatic CameraManager *instance();\n>\n> -\tvoid setEventDispatcher(EventDispatcher *dispatcher);\n> +\tvoid setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher);\n>  \tEventDispatcher *eventDispatcher();\n>\n>  private:\n> @@ -41,7 +41,7 @@ private:\n>  \tstd::unique_ptr<DeviceEnumerator> enumerator_;\n>  \tstd::vector<PipelineHandler *> pipes_;\n>\n> -\tEventDispatcher *dispatcher_;\n> +\tstd::unique_ptr<EventDispatcher> dispatcher_;\n>  };\n>\n>  } /* namespace libcamera */\n> diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\n> index 9f554be57e33..1430bb0d75a5 100644\n> --- a/src/libcamera/camera_manager.cpp\n> +++ b/src/libcamera/camera_manager.cpp\n> @@ -12,6 +12,7 @@\n>  #include \"event_dispatcher_poll.h\"\n>  #include \"log.h\"\n>  #include \"pipeline_handler.h\"\n> +#include \"utils.h\"\n>\n>  /**\n>   * \\file camera_manager.h\n> @@ -58,7 +59,6 @@ CameraManager::CameraManager()\n>\n>  CameraManager::~CameraManager()\n>  {\n> -\tdelete dispatcher_;\n>  }\n>\n>  /**\n> @@ -209,14 +209,14 @@ CameraManager *CameraManager::instance()\n>   * The CameraManager takes ownership of the event dispatcher and will delete it\n>   * when the application terminates.\n>   */\n> -void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)\n> +void CameraManager::setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher)\n>  {\n>  \tif (dispatcher_) {\n>  \t\tLOG(Warning) << \"Event dispatcher is already set\";\n>  \t\treturn;\n>  \t}\n>\n> -\tdispatcher_ = dispatcher;\n> +\tdispatcher_ = std::move(dispatcher);\n>  }\n>\n>  /**\n> @@ -226,14 +226,16 @@ void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)\n>   * If no dispatcher has been set, a default poll-based implementation is created\n>   * and returned, and no custom event dispatcher may be installed anymore.\n>   *\n> + * The returned event dispatcher is valid until the camera manager is destroyed.\n> + *\n>   * \\return Pointer to the event dispatcher\n>   */\n>  EventDispatcher *CameraManager::eventDispatcher()\n>  {\n>  \tif (!dispatcher_)\n\nDoes this access the resources owned by the unique_ptr<> ?\n\nThanks\n   j\n\n> -\t\tdispatcher_ = new EventDispatcherPoll();\n> +\t\tdispatcher_ = utils::make_unique<EventDispatcherPoll>();\n>\n> -\treturn dispatcher_;\n> +\treturn dispatcher_.get();\n>  }\n>\n>  } /* namespace libcamera */\n> --\n> Regards,\n>\n> Laurent Pinchart\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net\n\t[217.70.183.195])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8D0E560B21\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 18 Jan 2019 16:14:54 +0100 (CET)","from uno.localdomain (2-224-242-101.ip172.fastwebnet.it\n\t[2.224.242.101]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 0F89E60019;\n\tFri, 18 Jan 2019 15:14:52 +0000 (UTC)"],"X-Originating-IP":"2.224.242.101","Date":"Fri, 18 Jan 2019 16:15:03 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190118151503.gsuxa7kzlnnyfu7u@uno.localdomain>","References":"<20190117235916.1906-3-laurent.pinchart@ideasonboard.com>\n\t<20190118003201.3110-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\"; boundary=\"wdaczm526tfu4upc\"","Content-Disposition":"inline","In-Reply-To":"<20190118003201.3110-1-laurent.pinchart@ideasonboard.com>","User-Agent":"NeoMutt/20180716","Subject":"Re: [libcamera-devel] [PATCH v1.1 2/4] libcamera: camera_manager:\n\tUse std::unique_ptr to store event dispatcher","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Fri, 18 Jan 2019 15:14:54 -0000"}},{"id":408,"web_url":"https://patchwork.libcamera.org/comment/408/","msgid":"<20190118153117.GH5275@pendragon.ideasonboard.com>","date":"2019-01-18T15:31:17","subject":"Re: [libcamera-devel] [PATCH v1.1 2/4] libcamera: camera_manager:\n\tUse std::unique_ptr to store event dispatcher","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn Fri, Jan 18, 2019 at 04:15:03PM +0100, Jacopo Mondi wrote:\n> On Fri, Jan 18, 2019 at 02:32:01AM +0200, Laurent Pinchart wrote:\n> > The CameraManager takes ownership of the dispatcher passed to the\n> > setEventDispatcher() function. Enforces this by using std::unique_ptr<>.\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> > Changes since v1:\n> >\n> > - Use make_unique<> in CameraManager::setEventDispatcher()\n> > ---\n> >  include/libcamera/camera_manager.h |  4 ++--\n> >  src/libcamera/camera_manager.cpp   | 12 +++++++-----\n> >  2 files changed, 9 insertions(+), 7 deletions(-)\n> >\n> > diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h\n> > index 6cfcba3c3933..b82a8ce95b9f 100644\n> > --- a/include/libcamera/camera_manager.h\n> > +++ b/include/libcamera/camera_manager.h\n> > @@ -29,7 +29,7 @@ public:\n> >\n> >  \tstatic CameraManager *instance();\n> >\n> > -\tvoid setEventDispatcher(EventDispatcher *dispatcher);\n> > +\tvoid setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher);\n> >  \tEventDispatcher *eventDispatcher();\n> >\n> >  private:\n> > @@ -41,7 +41,7 @@ private:\n> >  \tstd::unique_ptr<DeviceEnumerator> enumerator_;\n> >  \tstd::vector<PipelineHandler *> pipes_;\n> >\n> > -\tEventDispatcher *dispatcher_;\n> > +\tstd::unique_ptr<EventDispatcher> dispatcher_;\n> >  };\n> >\n> >  } /* namespace libcamera */\n> > diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\n> > index 9f554be57e33..1430bb0d75a5 100644\n> > --- a/src/libcamera/camera_manager.cpp\n> > +++ b/src/libcamera/camera_manager.cpp\n> > @@ -12,6 +12,7 @@\n> >  #include \"event_dispatcher_poll.h\"\n> >  #include \"log.h\"\n> >  #include \"pipeline_handler.h\"\n> > +#include \"utils.h\"\n> >\n> >  /**\n> >   * \\file camera_manager.h\n> > @@ -58,7 +59,6 @@ CameraManager::CameraManager()\n> >\n> >  CameraManager::~CameraManager()\n> >  {\n> > -\tdelete dispatcher_;\n> >  }\n> >\n> >  /**\n> > @@ -209,14 +209,14 @@ CameraManager *CameraManager::instance()\n> >   * The CameraManager takes ownership of the event dispatcher and will delete it\n> >   * when the application terminates.\n> >   */\n> > -void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)\n> > +void CameraManager::setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher)\n> >  {\n> >  \tif (dispatcher_) {\n> >  \t\tLOG(Warning) << \"Event dispatcher is already set\";\n> >  \t\treturn;\n> >  \t}\n> >\n> > -\tdispatcher_ = dispatcher;\n> > +\tdispatcher_ = std::move(dispatcher);\n> >  }\n> >\n> >  /**\n> > @@ -226,14 +226,16 @@ void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)\n> >   * If no dispatcher has been set, a default poll-based implementation is created\n> >   * and returned, and no custom event dispatcher may be installed anymore.\n> >   *\n> > + * The returned event dispatcher is valid until the camera manager is destroyed.\n> > + *\n> >   * \\return Pointer to the event dispatcher\n> >   */\n> >  EventDispatcher *CameraManager::eventDispatcher()\n> >  {\n> >  \tif (!dispatcher_)\n> \n> Does this access the resources owned by the unique_ptr<> ?\n\nIf you mean does this check whether the pointer owned by the\nstd::unique_ptr<> dispatch_ is null, then yes, it does, through operator\nbool:\n\nhttps://en.cppreference.com/w/cpp/memory/unique_ptr/operator_bool\n\nIf you meant something else, then please rephrase the question :-)\n\n> > -\t\tdispatcher_ = new EventDispatcherPoll();\n> > +\t\tdispatcher_ = utils::make_unique<EventDispatcherPoll>();\n> >\n> > -\treturn dispatcher_;\n> > +\treturn dispatcher_.get();\n> >  }\n> >\n> >  } /* namespace libcamera */","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 545AA60B21\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 18 Jan 2019 16:31:22 +0100 (CET)","from pendragon.ideasonboard.com\n\t(dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi\n\t[IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 715E353E;\n\tFri, 18 Jan 2019 16:31:17 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1547825477;\n\tbh=XjMCeXIygyhhA7mUHDtiw+6aOXVjjyB0uEtEDnz+4/k=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=k/Da11HKrvGMPtv248PzPsdXsrhN/3uPjZNzv9PqLqlQpvXbf6DVyDHC0MQIEwo5g\n\t0SLe7THfq8JflTrZVZEYg7vzJK5I52JvGC0g+HSO98b8l1kRBcPcbMJWjfvMzG8vLQ\n\tfDAnDEh1i1gS/y6/cyoYI+F4RSpY7P5UXRs9Y0KI=","Date":"Fri, 18 Jan 2019 17:31:17 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190118153117.GH5275@pendragon.ideasonboard.com>","References":"<20190117235916.1906-3-laurent.pinchart@ideasonboard.com>\n\t<20190118003201.3110-1-laurent.pinchart@ideasonboard.com>\n\t<20190118151503.gsuxa7kzlnnyfu7u@uno.localdomain>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20190118151503.gsuxa7kzlnnyfu7u@uno.localdomain>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v1.1 2/4] libcamera: camera_manager:\n\tUse std::unique_ptr to store event dispatcher","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Fri, 18 Jan 2019 15:31:22 -0000"}},{"id":411,"web_url":"https://patchwork.libcamera.org/comment/411/","msgid":"<20190118154208.boa2gmlfevsub7e3@uno.localdomain>","date":"2019-01-18T15:42:08","subject":"Re: [libcamera-devel] [PATCH v1.1 2/4] libcamera: camera_manager:\n\tUse std::unique_ptr to store event dispatcher","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent,\n\nOn Fri, Jan 18, 2019 at 05:31:17PM +0200, Laurent Pinchart wrote:\n> Hi Jacopo,\n>\n> On Fri, Jan 18, 2019 at 04:15:03PM +0100, Jacopo Mondi wrote:\n> > On Fri, Jan 18, 2019 at 02:32:01AM +0200, Laurent Pinchart wrote:\n> > > The CameraManager takes ownership of the dispatcher passed to the\n> > > setEventDispatcher() function. Enforces this by using std::unique_ptr<>.\n> > >\n> > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > ---\n> > > Changes since v1:\n> > >\n> > > - Use make_unique<> in CameraManager::setEventDispatcher()\n> > > ---\n> > >  include/libcamera/camera_manager.h |  4 ++--\n> > >  src/libcamera/camera_manager.cpp   | 12 +++++++-----\n> > >  2 files changed, 9 insertions(+), 7 deletions(-)\n> > >\n> > > diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h\n> > > index 6cfcba3c3933..b82a8ce95b9f 100644\n> > > --- a/include/libcamera/camera_manager.h\n> > > +++ b/include/libcamera/camera_manager.h\n> > > @@ -29,7 +29,7 @@ public:\n> > >\n> > >  \tstatic CameraManager *instance();\n> > >\n> > > -\tvoid setEventDispatcher(EventDispatcher *dispatcher);\n> > > +\tvoid setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher);\n> > >  \tEventDispatcher *eventDispatcher();\n> > >\n> > >  private:\n> > > @@ -41,7 +41,7 @@ private:\n> > >  \tstd::unique_ptr<DeviceEnumerator> enumerator_;\n> > >  \tstd::vector<PipelineHandler *> pipes_;\n> > >\n> > > -\tEventDispatcher *dispatcher_;\n> > > +\tstd::unique_ptr<EventDispatcher> dispatcher_;\n> > >  };\n> > >\n> > >  } /* namespace libcamera */\n> > > diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\n> > > index 9f554be57e33..1430bb0d75a5 100644\n> > > --- a/src/libcamera/camera_manager.cpp\n> > > +++ b/src/libcamera/camera_manager.cpp\n> > > @@ -12,6 +12,7 @@\n> > >  #include \"event_dispatcher_poll.h\"\n> > >  #include \"log.h\"\n> > >  #include \"pipeline_handler.h\"\n> > > +#include \"utils.h\"\n> > >\n> > >  /**\n> > >   * \\file camera_manager.h\n> > > @@ -58,7 +59,6 @@ CameraManager::CameraManager()\n> > >\n> > >  CameraManager::~CameraManager()\n> > >  {\n> > > -\tdelete dispatcher_;\n> > >  }\n> > >\n> > >  /**\n> > > @@ -209,14 +209,14 @@ CameraManager *CameraManager::instance()\n> > >   * The CameraManager takes ownership of the event dispatcher and will delete it\n> > >   * when the application terminates.\n> > >   */\n> > > -void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)\n> > > +void CameraManager::setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher)\n> > >  {\n> > >  \tif (dispatcher_) {\n> > >  \t\tLOG(Warning) << \"Event dispatcher is already set\";\n> > >  \t\treturn;\n> > >  \t}\n> > >\n> > > -\tdispatcher_ = dispatcher;\n> > > +\tdispatcher_ = std::move(dispatcher);\n> > >  }\n> > >\n> > >  /**\n> > > @@ -226,14 +226,16 @@ void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)\n> > >   * If no dispatcher has been set, a default poll-based implementation is created\n> > >   * and returned, and no custom event dispatcher may be installed anymore.\n> > >   *\n> > > + * The returned event dispatcher is valid until the camera manager is destroyed.\n> > > + *\n> > >   * \\return Pointer to the event dispatcher\n> > >   */\n> > >  EventDispatcher *CameraManager::eventDispatcher()\n> > >  {\n> > >  \tif (!dispatcher_)\n> >\n> > Does this access the resources owned by the unique_ptr<> ?\n>\n> If you mean does this check whether the pointer owned by the\n> std::unique_ptr<> dispatch_ is null, then yes, it does, through operator\n> bool:\n>\n> https://en.cppreference.com/w/cpp/memory/unique_ptr/operator_bool\n>\n> If you meant something else, then please rephrase the question :-)\n\nThat was my question :)\nThanks\n  j\n\n>\n> > > -\t\tdispatcher_ = new EventDispatcherPoll();\n> > > +\t\tdispatcher_ = utils::make_unique<EventDispatcherPoll>();\n> > >\n> > > -\treturn dispatcher_;\n> > > +\treturn dispatcher_.get();\n> > >  }\n> > >\n> > >  } /* namespace libcamera */\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net\n\t[217.70.183.199])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 228FF60B21\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 18 Jan 2019 16:42:00 +0100 (CET)","from uno.localdomain (2-224-242-101.ip172.fastwebnet.it\n\t[2.224.242.101]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay9-d.mail.gandi.net (Postfix) with ESMTPSA id 97DA3FF812;\n\tFri, 18 Jan 2019 15:41:58 +0000 (UTC)"],"X-Originating-IP":"2.224.242.101","Date":"Fri, 18 Jan 2019 16:42:08 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190118154208.boa2gmlfevsub7e3@uno.localdomain>","References":"<20190117235916.1906-3-laurent.pinchart@ideasonboard.com>\n\t<20190118003201.3110-1-laurent.pinchart@ideasonboard.com>\n\t<20190118151503.gsuxa7kzlnnyfu7u@uno.localdomain>\n\t<20190118153117.GH5275@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\"; boundary=\"crt37vj4r6wbkhu6\"","Content-Disposition":"inline","In-Reply-To":"<20190118153117.GH5275@pendragon.ideasonboard.com>","User-Agent":"NeoMutt/20180716","Subject":"Re: [libcamera-devel] [PATCH v1.1 2/4] libcamera: camera_manager:\n\tUse std::unique_ptr to store event dispatcher","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Fri, 18 Jan 2019 15:42:00 -0000"}},{"id":413,"web_url":"https://patchwork.libcamera.org/comment/413/","msgid":"<20190118155006.GT6484@bigcity.dyn.berto.se>","date":"2019-01-18T15:50:06","subject":"Re: [libcamera-devel] [PATCH v1.1 2/4] libcamera: camera_manager:\n\tUse std::unique_ptr to store event dispatcher","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nThanks for your patch.\n\nOn 2019-01-18 02:32:01 +0200, Laurent Pinchart wrote:\n> The CameraManager takes ownership of the dispatcher passed to the\n> setEventDispatcher() function. Enforces this by using std::unique_ptr<>.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> ---\n> Changes since v1:\n> \n> - Use make_unique<> in CameraManager::setEventDispatcher()\n> ---\n>  include/libcamera/camera_manager.h |  4 ++--\n>  src/libcamera/camera_manager.cpp   | 12 +++++++-----\n>  2 files changed, 9 insertions(+), 7 deletions(-)\n> \n> diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h\n> index 6cfcba3c3933..b82a8ce95b9f 100644\n> --- a/include/libcamera/camera_manager.h\n> +++ b/include/libcamera/camera_manager.h\n> @@ -29,7 +29,7 @@ public:\n>  \n>  \tstatic CameraManager *instance();\n>  \n> -\tvoid setEventDispatcher(EventDispatcher *dispatcher);\n> +\tvoid setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher);\n>  \tEventDispatcher *eventDispatcher();\n>  \n>  private:\n> @@ -41,7 +41,7 @@ private:\n>  \tstd::unique_ptr<DeviceEnumerator> enumerator_;\n>  \tstd::vector<PipelineHandler *> pipes_;\n>  \n> -\tEventDispatcher *dispatcher_;\n> +\tstd::unique_ptr<EventDispatcher> dispatcher_;\n>  };\n>  \n>  } /* namespace libcamera */\n> diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\n> index 9f554be57e33..1430bb0d75a5 100644\n> --- a/src/libcamera/camera_manager.cpp\n> +++ b/src/libcamera/camera_manager.cpp\n> @@ -12,6 +12,7 @@\n>  #include \"event_dispatcher_poll.h\"\n>  #include \"log.h\"\n>  #include \"pipeline_handler.h\"\n> +#include \"utils.h\"\n>  \n>  /**\n>   * \\file camera_manager.h\n> @@ -58,7 +59,6 @@ CameraManager::CameraManager()\n>  \n>  CameraManager::~CameraManager()\n>  {\n> -\tdelete dispatcher_;\n>  }\n>  \n>  /**\n> @@ -209,14 +209,14 @@ CameraManager *CameraManager::instance()\n>   * The CameraManager takes ownership of the event dispatcher and will delete it\n>   * when the application terminates.\n>   */\n> -void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)\n> +void CameraManager::setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher)\n>  {\n>  \tif (dispatcher_) {\n>  \t\tLOG(Warning) << \"Event dispatcher is already set\";\n>  \t\treturn;\n>  \t}\n>  \n> -\tdispatcher_ = dispatcher;\n> +\tdispatcher_ = std::move(dispatcher);\n>  }\n>  \n>  /**\n> @@ -226,14 +226,16 @@ void CameraManager::setEventDispatcher(EventDispatcher *dispatcher)\n>   * If no dispatcher has been set, a default poll-based implementation is created\n>   * and returned, and no custom event dispatcher may be installed anymore.\n>   *\n> + * The returned event dispatcher is valid until the camera manager is destroyed.\n> + *\n>   * \\return Pointer to the event dispatcher\n>   */\n>  EventDispatcher *CameraManager::eventDispatcher()\n>  {\n>  \tif (!dispatcher_)\n> -\t\tdispatcher_ = new EventDispatcherPoll();\n> +\t\tdispatcher_ = utils::make_unique<EventDispatcherPoll>();\n>  \n> -\treturn dispatcher_;\n> +\treturn dispatcher_.get();\n>  }\n>  \n>  } /* namespace libcamera */\n> -- \n> Regards,\n> \n> Laurent Pinchart\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lj1-x243.google.com (mail-lj1-x243.google.com\n\t[IPv6:2a00:1450:4864:20::243])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6703860B21\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 18 Jan 2019 16:50:08 +0100 (CET)","by mail-lj1-x243.google.com with SMTP id k15-v6so12001477ljc.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 18 Jan 2019 07:50:08 -0800 (PST)","from localhost (89-233-230-99.cust.bredband2.com. [89.233.230.99])\n\tby smtp.gmail.com with ESMTPSA id\n\tx18-v6sm874825lji.27.2019.01.18.07.50.06\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tFri, 18 Jan 2019 07:50:06 -0800 (PST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to\n\t:user-agent; bh=q7J+D6eS0D5P37VjW/yiEg0evU3BAGxJ9EQ8+p0VOaA=;\n\tb=KdtuAn3UL8ZRLMPETggHqrZmC0qT8PHH4O3U/IWJqokem88cDhQ2oMpaH+RXADZM4o\n\tb6fPUwWZAugSTzKF5b4ALwX1+ixSglICefHyTAKgof5gFnIst06rpDcND+FNI0guiSPN\n\tmsP8LD5p2zyx43rzczVd4vzF93NnExYSIGOUXVT3fTD1B4ScNWa8r273uMYJOqcVGhsR\n\tr86YGs7aBM1zHFS5LH3A2JkW3kSWuCkMcVPFLtvmWNhWdQyT15edDC1Oc+aLs6XhiZHG\n\tFnjw0pB9hqrnMNO+VaHtiPwP7iuoV4YLLyw9LlhS2dEKfhzuQNxrbubP8dGj4Z3ZlT49\n\tvlPw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to:user-agent;\n\tbh=q7J+D6eS0D5P37VjW/yiEg0evU3BAGxJ9EQ8+p0VOaA=;\n\tb=n9xzF0iFZnIukxfOLdO6aiO7TISBgf0hDhfCV6hmJcSo+kC42xykDvtyIXwQPew6PZ\n\tuVCRHy4RKXRAID0CPEKekB8aS2Mq8o3UUQUSKNAsAovr3QUty9TnGtaEdMtwuzmCDCiP\n\ttaNxDcoYMouJTtNXWeHba0N7aIayDR/nAaPz2quJjbGUmLuqH6dF67Z+pzpZ3Eguy5W/\n\tbZZpRGkybEPHoDc17bukV7EIIj4M6gDptUrcCcwHhLRCRCMxkgtfdtt2pH9BRo1IwAIG\n\tgaep+C82I0r0xw0EVswjJaxXhDAiy6eMDMGgX8Fh5F3MLVgAm5OzLoLkPE9IKDiH7AHR\n\t+Gmg==","X-Gm-Message-State":"AJcUukchF/HCSygcwnwsFuII82+THM2Mt6XYOfpKXWJYDgVheuaK2cyF\n\tYhPDrXF+/w1jTAMJYGsRuzATLw==","X-Google-Smtp-Source":"ALg8bN7JZsRILKc8jgrhNRi+FFwAtwhL1vzPUMQllbO7qyqFSgtz+m2atkUrPQERgbdACr82QOHZKQ==","X-Received":"by 2002:a2e:9556:: with SMTP id\n\tt22-v6mr5171266ljh.36.1547826607609; \n\tFri, 18 Jan 2019 07:50:07 -0800 (PST)","Date":"Fri, 18 Jan 2019 16:50:06 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190118155006.GT6484@bigcity.dyn.berto.se>","References":"<20190117235916.1906-3-laurent.pinchart@ideasonboard.com>\n\t<20190118003201.3110-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20190118003201.3110-1-laurent.pinchart@ideasonboard.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v1.1 2/4] libcamera: camera_manager:\n\tUse std::unique_ptr to store event dispatcher","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Fri, 18 Jan 2019 15:50:08 -0000"}}]