[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