[RFC PATCH v1 09/12] apps: lc-compliance: Check number of buffers in allocator
Barnabás Pőcze
pobrn at protonmail.com
Fri Jan 10 13:15:52 CET 2025
2025. január 10., péntek 11:52 keltezéssel, Laurent Pinchart <laurent.pinchart at ideasonboard.com> írta:
> On Fri, Jan 10, 2025 at 09:46:23AM +0000, Barnabás Pőcze wrote:
> > 2025. január 7., kedd 18:08 keltezéssel, Jacopo Mondi írta:
> > > On Fri, Dec 20, 2024 at 03:08:41PM +0000, Barnabás Pőcze wrote:
> > > > Do a consistency check to ensure that the return value
> > > > matches the number of buffers actually created.
> > >
> > > Could you please make sure your commit messages in the series span to
> > > up to 72 cols ?
> > >
> > > > Signed-off-by: Barnabás Pőcze <pobrn at protonmail.com>
> > > > ---
> > > > src/apps/lc-compliance/helpers/capture.cpp | 1 +
> > > > 1 file changed, 1 insertion(+)
> > > >
> > > > diff --git a/src/apps/lc-compliance/helpers/capture.cpp b/src/apps/lc-compliance/helpers/capture.cpp
> > > > index b473e0773..5cc7635f7 100644
> > > > --- a/src/apps/lc-compliance/helpers/capture.cpp
> > > > +++ b/src/apps/lc-compliance/helpers/capture.cpp
> > > > @@ -49,6 +49,7 @@ void Capture::start()
> > > >
> > > > ASSERT_GE(count, 0) << "Failed to allocate buffers";
> > > > EXPECT_EQ(count, config_->at(0).bufferCount) << "Allocated less buffers than expected";
> > > > + ASSERT_EQ(count, allocator_.buffers(stream).size()) << "Unexpected number of buffers in allocator";
> > >
> > > mmm, FrameBufferAllocator::allocate() returns the number of allocated
> > > buffers, if this doesn't match
> > >
> > > allocator_.buffers(stream).size())
> > >
> > > it's likely a problem in the FrameBufferAllocator implementation
> > > rather than an issue here.
> >
> > I think there should be some kind of a consistency check either in
> > `FrameBufferAllocator::allocate()` or at least here.
>
> Maybe it's a candidae for a unit test instead ?
Sorry, but I don't quite see what you mean. I was thinking along the lines of
diff --git a/src/libcamera/framebuffer_allocator.cpp b/src/libcamera/framebuffer_allocator.cpp
index 3d53bde21..7f26e36b9 100644
--- a/src/libcamera/framebuffer_allocator.cpp
+++ b/src/libcamera/framebuffer_allocator.cpp
@@ -101,6 +101,8 @@ int FrameBufferAllocator::allocate(Stream *stream)
if (ret < 0)
buffers_.erase(it);
+ ASSERT(std::size_t(ret) == it->second.size());
+
return ret;
}
or
diff --git a/src/libcamera/framebuffer_allocator.cpp b/src/libcamera/framebuffer_allocator.cpp
index 3d53bde21..830c6fa1b 100644
--- a/src/libcamera/framebuffer_allocator.cpp
+++ b/src/libcamera/framebuffer_allocator.cpp
@@ -101,6 +101,15 @@ int FrameBufferAllocator::allocate(Stream *stream)
if (ret < 0)
buffers_.erase(it);
+ if (std::size_t(ret) != it->second.size()) {
+ LOG(Allocator, Error)
+ << "Pipeline handler bug: "
+ << "return value does not reflect number of allocated buffers: "
+ << "adjusting " << ret << " to " << it->second.size();
+
+ ret = it->second.size();
+ }
+
return ret;
}
or possibly
diff --git a/src/libcamera/framebuffer_allocator.cpp b/src/libcamera/framebuffer_allocator.cpp
index 3d53bde21..b583dbbc3 100644
--- a/src/libcamera/framebuffer_allocator.cpp
+++ b/src/libcamera/framebuffer_allocator.cpp
@@ -98,10 +98,12 @@ int FrameBufferAllocator::allocate(Stream *stream)
<< "Stream is not part of " << camera_->id()
<< " active configuration";
- if (ret < 0)
+ if (ret < 0) {
buffers_.erase(it);
+ return ret;
+ }
- return ret;
+ return it->second.size();
}
/**
I am not sure how a unit test could provide the same guarantees.
Regards,
Barnabás Pőcze
>
> > > Unless I missed something, I would drop this patch
> > >
> > > > camera_->requestCompleted.connect(this, &Capture::requestComplete);
>
> --
> Regards,
>
> Laurent Pinchart
>
More information about the libcamera-devel
mailing list