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

Kieran Bingham kieran.bingham at ideasonboard.com
Tue Jan 28 00:35:27 CET 2025


Quoting Barnabás Pőcze (2025-01-20 14:16:59)
> 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: Kieran Bingham <kieran.bingham 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));
>  
> -- 
> 2.48.1
> 
>


More information about the libcamera-devel mailing list