[libcamera-devel] [PATCH] pipeline: raspberrypi: Fix a bug when clearing out Request buffers on stop

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Jul 28 08:53:56 CEST 2021


Hi Naush,

Thank you for the patch.

On Wed, Jul 21, 2021 at 10:28:00AM +0100, Naushir Patuck wrote:
> When RPiCameraData::clearIncompleteRequests() clears out the request queue
> during a stop condition, it unconditionally calls completeBuffer() on all
> buffers in each request.  This is wrong, as a buffer could have already been
> completed as part of the current request, but the request itself may not yet
> have completed.
> 
> Fix this by checking if the buffers in the request have been completed before
> cancelling them.

This probably calls for improving the PipelineHandler, FrameBuffer and
Request classes to simplify completion handling. For the time being,
this patch looks good.

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

> Fixes: d372aaa10ddb ("pipeline: raspberrypi: Simplify RPiCameraData::clearIncompleteRequests()")
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> ---
>  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index f821d8fe1b6c..0bab3bedd402 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -1520,8 +1520,14 @@ void RPiCameraData::clearIncompleteRequests()
>  
>  		for (auto &b : request->buffers()) {
>  			FrameBuffer *buffer = b.second;
> -			buffer->cancel();
> -			pipe_->completeBuffer(request, buffer);
> +			/*
> +			 * Has the buffer already been handed back to the
> +			 * request? If not, do so now.
> +			 */
> +			if (buffer->request()) {
> +				buffer->cancel();
> +				pipe_->completeBuffer(request, buffer);
> +			}
>  		}
>  
>  		pipe_->completeRequest(request);

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list