[libcamera-devel] [PATCH v3 06/17] py: Use UniqueFD

Jacopo Mondi jacopo at jmondi.org
Thu Aug 18 16:23:52 CEST 2022


Hi Tomi

On Fri, Jul 01, 2022 at 11:45:10AM +0300, Tomi Valkeinen wrote:
> Use UniqueFD to automate the eventfd lifetime management.
>

Here you go :)

Can you squash with the previous patch  ?

> Signed-off-by: Tomi Valkeinen <tomi.valkeinen 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_;
>
> --
> 2.34.1
>


More information about the libcamera-devel mailing list