[PATCH 2/4] libcamera: Use disconnect signal in ipa proxy worker

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sun Oct 20 18:48:54 CEST 2024


On Sun, Oct 20, 2024 at 12:35:57PM +0800, Cheng-Hao Yang wrote:
> On Sun, Oct 20, 2024 at 6:45 AM Kieran Bingham wrote:
> > Quoting Harvey Yang (2024-10-18 08:57:35)
> > > Previously the worker might not receive the disconnect signal, and the
> > > forked process might stay alive forever.
> > >
> > > This CL also helps DMA buf recycling, as the algo process might hold DMA
> > > buf file descriptors.
> >
> > Should this just be part of the previous patch? Or is it somehow
> > distinct?
> 
> Yes, I'm also fine with merging them. Will do in the next version.

Please detail in the commit message both the expected behaviour on the
libcamera side and on the proxy worker side.

> > > Signed-off-by: Harvey Yang <chenghaoyang at chromium.org>
> > > Co-developed-by: Yudhistira Erlandinata <yerlandinata at chromium.org>
> > > Signed-off-by: Yudhistira Erlandinata <yerlandinata at chromium.org>
> > > ---
> > >  .../libcamera_templates/module_ipa_proxy_worker.cpp.tmpl     | 5 +++++
> > >  1 file changed, 5 insertions(+)
> > >
> > > diff --git a/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl b/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl
> > > index 1f990d3f9..68d68c4a5 100644
> > > --- a/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl
> > > +++ b/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl
> > > @@ -60,6 +60,10 @@ public:
> > >
> > >         ~{{proxy_worker_name}}() {}
> > >
> > > +       void disconnected() {
> > > +               exit_ = true;
> > > +       }

	void disconnected()
	{
		exit_ = true;
	}

> > > +
> > >         void readyRead()
> > >         {
> > >                 IPCUnixSocket::Payload _message;
> > > @@ -131,6 +135,7 @@ public:
> > >                         return EXIT_FAILURE;
> > >                 }
> > >                 socket_.readyRead.connect(this, &{{proxy_worker_name}}::readyRead);
> > > +               socket_.disconnected.connect(this, &{{proxy_worker_name}}::disconnected);
> > >
> > >                 ipa_ = dynamic_cast<{{interface_name}} *>(ipam->createInterface());
> > >                 if (!ipa_) {

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list