[RFC PATCH v3 6/9] libcamera: process: Use span instead of vector

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Mar 26 15:08:55 CET 2025


Hi Barnabás,

Thank you for the patch.

On Tue, Mar 25, 2025 at 07:08:18PM +0100, Barnabás Pőcze wrote:
> Use `libcamera::Span` whenever applicable.
> 
> Signed-off-by: Barnabás Pőcze <barnabas.pocze at ideasonboard.com>

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

> ---
>  include/libcamera/internal/process.h  | 8 ++++----
>  src/libcamera/ipc_pipe_unixsocket.cpp | 9 +++------
>  src/libcamera/process.cpp             | 8 ++++----
>  test/process/process_test.cpp         | 5 ++---
>  4 files changed, 13 insertions(+), 17 deletions(-)
> 
> diff --git a/include/libcamera/internal/process.h b/include/libcamera/internal/process.h
> index 030a1e66e..e4f5bb979 100644
> --- a/include/libcamera/internal/process.h
> +++ b/include/libcamera/internal/process.h
> @@ -9,9 +9,9 @@
>  
>  #include <signal.h>
>  #include <string>
> -#include <vector>
>  
>  #include <libcamera/base/signal.h>
> +#include <libcamera/base/span.h>
>  #include <libcamera/base/unique_fd.h>
>  
>  namespace libcamera {
> @@ -31,8 +31,8 @@ public:
>  	~Process();
>  
>  	int start(const std::string &path,
> -		  const std::vector<std::string> &args = std::vector<std::string>(),
> -		  const std::vector<int> &fds = std::vector<int>());
> +		  Span<const std::string> args = {},
> +		  Span<const int> fds = {});
>  
>  	ExitStatus exitStatus() const { return exitStatus_; }
>  	int exitCode() const { return exitCode_; }
> @@ -44,7 +44,7 @@ public:
>  private:
>  	LIBCAMERA_DISABLE_COPY_AND_MOVE(Process)
>  
> -	void closeAllFdsExcept(const std::vector<int> &fds);
> +	void closeAllFdsExcept(Span<const int> fds);
>  	int isolate();
>  	void died(int wstatus);
>  
> diff --git a/src/libcamera/ipc_pipe_unixsocket.cpp b/src/libcamera/ipc_pipe_unixsocket.cpp
> index 668ec73b9..7ee7cac79 100644
> --- a/src/libcamera/ipc_pipe_unixsocket.cpp
> +++ b/src/libcamera/ipc_pipe_unixsocket.cpp
> @@ -28,10 +28,6 @@ IPCPipeUnixSocket::IPCPipeUnixSocket(const char *ipaModulePath,
>  				     const char *ipaProxyWorkerPath)
>  	: IPCPipe()
>  {
> -	std::vector<int> fds;
> -	std::vector<std::string> args;
> -	args.push_back(ipaModulePath);
> -
>  	socket_ = std::make_unique<IPCUnixSocket>();
>  	UniqueFD fd = socket_->create();
>  	if (!fd.isValid()) {
> @@ -39,8 +35,9 @@ IPCPipeUnixSocket::IPCPipeUnixSocket(const char *ipaModulePath,
>  		return;
>  	}
>  	socket_->readyRead.connect(this, &IPCPipeUnixSocket::readyRead);
> -	args.push_back(std::to_string(fd.get()));
> -	fds.push_back(fd.get());
> +
> +	std::array args{ std::string(ipaModulePath), std::to_string(fd.get()) };
> +	std::array fds{ fd.get() };
>  
>  	proc_ = std::make_unique<Process>();
>  	int ret = proc_->start(ipaProxyWorkerPath, args, fds);
> diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp
> index 62e63255b..5603dc903 100644
> --- a/src/libcamera/process.cpp
> +++ b/src/libcamera/process.cpp
> @@ -235,8 +235,8 @@ Process::~Process()
>   * or a negative error code otherwise
>   */
>  int Process::start(const std::string &path,
> -		   const std::vector<std::string> &args,
> -		   const std::vector<int> &fds)
> +		   Span<const std::string> args,
> +		   Span<const int> fds)
>  {
>  	int ret;
>  
> @@ -282,9 +282,9 @@ int Process::start(const std::string &path,
>  	}
>  }
>  
> -void Process::closeAllFdsExcept(const std::vector<int> &fds)
> +void Process::closeAllFdsExcept(Span<const int> fds)
>  {
> -	std::vector<int> v(fds);
> +	std::vector<int> v(fds.begin(), fds.end());
>  	sort(v.begin(), v.end());
>  
>  	ASSERT(v.empty() || v.front() >= 0);
> diff --git a/test/process/process_test.cpp b/test/process/process_test.cpp
> index e9f5e7e9b..a88d8fef1 100644
> --- a/test/process/process_test.cpp
> +++ b/test/process/process_test.cpp
> @@ -5,9 +5,9 @@
>   * Process test
>   */
>  
> +#include <array>
>  #include <iostream>
>  #include <unistd.h>
> -#include <vector>
>  
>  #include <libcamera/base/event_dispatcher.h>
>  #include <libcamera/base/thread.h>
> @@ -48,8 +48,7 @@ protected:
>  		Timer timeout;
>  
>  		int exitCode = 42;
> -		vector<std::string> args;
> -		args.push_back(to_string(exitCode));
> +		std::array args{ to_string(exitCode) };
>  		proc_.finished.connect(this, &ProcessTest::procFinished);
>  
>  		/* Test that kill() on an unstarted process is safe. */

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list