[PATCH v1] libcamera: request: addBuffer(): Do fence check earlier

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Jan 21 12:09:46 CET 2025


Hi Barnabás,

Thank you for the patch.

On Mon, Jan 20, 2025 at 02:16:59PM +0000, Barnabás Pőcze wrote:
> Check if the buffer has a fence before making any modifications because
> otherwise it is possible for `Request::addBuffer()` to return an error code
> while at the same time the buffer - for all intents and purposes - is added
> to the request.
> 
> Signed-off-by: Barnabás Pőcze <pobrn at protonmail.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> ---
>  src/libcamera/request.cpp | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> index 5cfafea89..e7eb1c0c8 100644
> --- a/src/libcamera/request.cpp
> +++ b/src/libcamera/request.cpp
> @@ -466,6 +466,15 @@ int Request::addBuffer(const Stream *stream, FrameBuffer *buffer,
>  		return -EINVAL;
>  	}
>  
> +	/*
> +	 * Make sure the fence has been extracted from the buffer
> +	 * to avoid waiting on a stale fence.
> +	 */
> +	if (buffer->_d()->fence()) {
> +		LOG(Request, Error) << "Can't add buffer that still references a fence";
> +		return -EEXIST;
> +	}
> +
>  	auto it = bufferMap_.find(stream);
>  	if (it != bufferMap_.end()) {
>  		LOG(Request, Error) << "FrameBuffer already set for stream";
> @@ -476,15 +485,6 @@ int Request::addBuffer(const Stream *stream, FrameBuffer *buffer,
>  	_d()->pending_.insert(buffer);
>  	bufferMap_[stream] = buffer;
>  
> -	/*
> -	 * Make sure the fence has been extracted from the buffer
> -	 * to avoid waiting on a stale fence.
> -	 */
> -	if (buffer->_d()->fence()) {
> -		LOG(Request, Error) << "Can't add buffer that still references a fence";
> -		return -EEXIST;
> -	}
> -
>  	if (fence && fence->isValid())
>  		buffer->_d()->setFence(std::move(fence));
>  

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list