[libcamera-devel,v2] Revert "pipeline: raspberrypi: Do not unconditionally free buffers on close"
diff mbox series

Message ID 20221109104940.5799-1-david.plowman@raspberrypi.com
State Accepted
Commit 75e7befb1667f620410f0f15a10eccb32d7df66d
Headers show
Series
  • [libcamera-devel,v2] Revert "pipeline: raspberrypi: Do not unconditionally free buffers on close"
Related show

Commit Message

David Plowman Nov. 9, 2022, 10:49 a.m. UTC
This reverts commit 30d704732badc675f72fe73d14749669cb645c23.

It turns out that this commit causes some regressions and is in fact
unnecessary because the related commit "libcamera: v4l2_videodevice:
Guard against releasing unallocated buffers"
(a2bdff6d0b67475492ac7cf9318866b6d89a28fd) fixes the problem
completely (if the buffers were never allocated, the video device
avoids trying to free them even if the pipeline handler asks).

The reason for the regressions is that in this new (broken) scheme we
would never call clearBuffers() on all the streams if the internal
buffers were never allocated (i.e. buffersAllocated_ is never
set). This causes the stream's bufferMap_ list to get longer and
longer if there are multiple back-to-back calls to configure, and
dev_->importBuffers() will ultimately to fail.

So either we need to think more carefully about how to stop the
pipeline handler from freeing buffers that it doesn't own, or we just
leave it as the other commit resolves the problem on its own. In the
interim, simply reverting this commit certainly seems like the best
solution.

Fixes: 30d704732bad ("pipeline: raspberrypi: Do not unconditionally free buffers on close")
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
---
 src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 3 ---
 1 file changed, 3 deletions(-)

Comments

Kieran Bingham Nov. 9, 2022, 2:35 p.m. UTC | #1
Quoting David Plowman via libcamera-devel (2022-11-09 10:49:40)
> This reverts commit 30d704732badc675f72fe73d14749669cb645c23.
> 
> It turns out that this commit causes some regressions and is in fact
> unnecessary because the related commit "libcamera: v4l2_videodevice:
> Guard against releasing unallocated buffers"
> (a2bdff6d0b67475492ac7cf9318866b6d89a28fd) fixes the problem
> completely (if the buffers were never allocated, the video device
> avoids trying to free them even if the pipeline handler asks).
> 
> The reason for the regressions is that in this new (broken) scheme we
> would never call clearBuffers() on all the streams if the internal
> buffers were never allocated (i.e. buffersAllocated_ is never
> set). This causes the stream's bufferMap_ list to get longer and
> longer if there are multiple back-to-back calls to configure, and
> dev_->importBuffers() will ultimately to fail.
> 
> So either we need to think more carefully about how to stop the
> pipeline handler from freeing buffers that it doesn't own, or we just
> leave it as the other commit resolves the problem on its own. In the
> interim, simply reverting this commit certainly seems like the best
> solution.
> 
> Fixes: 30d704732bad ("pipeline: raspberrypi: Do not unconditionally free buffers on close")
> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
> Reviewed-by: Naushir Patuck <naush@raspberrypi.com>

No harm with a revert if it's not right.

Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> ---
>  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 3 ---
>  1 file changed, 3 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 1b599fcc..343f8cb2 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -1506,9 +1506,6 @@ void PipelineHandlerRPi::mapBuffers(Camera *camera, const RPi::BufferMap &buffer
>  
>  void RPiCameraData::freeBuffers()
>  {
> -       if (!buffersAllocated_)
> -               return;
> -
>         if (ipa_) {
>                 /*
>                  * Copy the buffer ids from the unordered_set to a vector to
> -- 
> 2.30.2
>

Patch
diff mbox series

diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 1b599fcc..343f8cb2 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -1506,9 +1506,6 @@  void PipelineHandlerRPi::mapBuffers(Camera *camera, const RPi::BufferMap &buffer
 
 void RPiCameraData::freeBuffers()
 {
-	if (!buffersAllocated_)
-		return;
-
 	if (ipa_) {
 		/*
 		 * Copy the buffer ids from the unordered_set to a vector to