[libcamera-devel] [PATCH v3 06/17] py: Use UniqueFD
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Aug 18 17:13:25 CEST 2022
Hi Tomi,
Thank you for the patch.
On Fri, Jul 01, 2022 at 11:45:10AM +0300, Tomi Valkeinen wrote:
> Use UniqueFD to automate the eventfd lifetime management.
>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/py/libcamera/py_camera_manager.cpp | 16 ++++------------
> src/py/libcamera/py_camera_manager.h | 4 ++--
> 2 files changed, 6 insertions(+), 14 deletions(-)
>
> diff --git a/src/py/libcamera/py_camera_manager.cpp b/src/py/libcamera/py_camera_manager.cpp
> index ad47271d..51a890c8 100644
> --- a/src/py/libcamera/py_camera_manager.cpp
> +++ b/src/py/libcamera/py_camera_manager.cpp
> @@ -27,25 +27,17 @@ PyCameraManager::PyCameraManager()
> throw std::system_error(errno, std::generic_category(),
> "Failed to create eventfd");
>
> - eventFd_ = fd;
> + eventFd_ = UniqueFD(fd);
>
> int ret = cameraManager_->start();
> - if (ret) {
> - close(fd);
> - eventFd_ = -1;
> + if (ret)
> throw std::system_error(-ret, std::generic_category(),
> "Failed to start CameraManager");
> - }
> }
>
> PyCameraManager::~PyCameraManager()
> {
> LOG(Python, Debug) << "~PyCameraManager()";
> -
> - if (eventFd_ != -1) {
> - close(eventFd_);
> - eventFd_ = -1;
> - }
> }
>
> py::list PyCameraManager::cameras()
> @@ -93,7 +85,7 @@ void PyCameraManager::writeFd()
> {
> uint64_t v = 1;
>
> - size_t s = write(eventFd_, &v, 8);
> + size_t s = write(eventFd_.get(), &v, 8);
> /*
> * We should never fail, and have no simple means to manage the error,
> * so let's log a fatal error.
> @@ -106,7 +98,7 @@ void PyCameraManager::readFd()
> {
> uint8_t buf[8];
>
> - if (read(eventFd_, buf, 8) != 8)
> + if (read(eventFd_.get(), buf, 8) != 8)
> throw std::system_error(errno, std::generic_category());
> }
>
> diff --git a/src/py/libcamera/py_camera_manager.h b/src/py/libcamera/py_camera_manager.h
> index 9c15f814..710163e8 100644
> --- a/src/py/libcamera/py_camera_manager.h
> +++ b/src/py/libcamera/py_camera_manager.h
> @@ -24,7 +24,7 @@ public:
>
> static const std::string &version() { return CameraManager::version(); }
>
> - int eventFd() const { return eventFd_; }
> + int eventFd() const { return eventFd_.get(); }
>
> std::vector<pybind11::object> getReadyRequests();
>
> @@ -33,7 +33,7 @@ public:
> private:
> std::unique_ptr<CameraManager> cameraManager_;
>
> - int eventFd_ = -1;
> + UniqueFD eventFd_;
> std::mutex completedRequestsMutex_;
> std::vector<Request *> completedRequests_;
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list