[libcamera-devel] [PATCH] test: threads: Fix memory leak

Umang Jain umang.jain at ideasonboard.com
Mon Apr 12 06:15:00 CEST 2021


Hi Laurent,

On 4/12/21 3:06 AM, Laurent Pinchart wrote:
> The last instance of Thread allocated in the test is never deleted, not
I think you meant s/not/nor
> are other instances deleted in error paths. Use a std::unique_ptr<> to
> ensure deletion.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>

> ---
>   test/threads.cpp | 19 ++++++++-----------
>   1 file changed, 8 insertions(+), 11 deletions(-)
>
> diff --git a/test/threads.cpp b/test/threads.cpp
> index b4b8d913cd2b..e0c50dc90a65 100644
> --- a/test/threads.cpp
> +++ b/test/threads.cpp
> @@ -7,6 +7,7 @@
>   
>   #include <chrono>
>   #include <iostream>
> +#include <memory>
>   #include <thread>
>   
>   #include "libcamera/internal/thread.h"
> @@ -45,23 +46,23 @@ protected:
>   	int run()
>   	{
>   		/* Test Thread() retrieval for the main thread. */
> -		Thread *thread = Thread::current();
> -		if (!thread) {
> +		Thread *mainThread = Thread::current();
> +		if (!mainThread) {
>   			cout << "Thread::current() failed to main thread"
>   			     << endl;
>   			return TestFail;
>   		}
>   
> -		if (!thread->isRunning()) {
> +		if (!mainThread->isRunning()) {
>   			cout << "Main thread is not running" << endl;
>   			return TestFail;
>   		}
>   
>   		/* Test starting the main thread, the test shall not crash. */
> -		thread->start();
> +		mainThread->start();
>   
>   		/* Test the running state of a custom thread. */
> -		thread = new Thread();
> +		std::unique_ptr<Thread> thread = std::make_unique<Thread>();
>   		thread->start();
>   
>   		if (!thread->isRunning()) {
> @@ -79,10 +80,8 @@ protected:
>   			return TestFail;
>   		}
>   
> -		delete thread;
> -
>   		/* Test waiting for completion with a timeout. */
> -		thread = new DelayThread(chrono::milliseconds(500));
> +		thread = std::make_unique<DelayThread>(chrono::milliseconds(500));
>   		thread->start();
>   		thread->exit(0);
>   
> @@ -100,10 +99,8 @@ protected:
>   			return TestFail;
>   		}
>   
> -		delete thread;
> -
>   		/* Test waiting on a thread that isn't running. */
> -		thread = new Thread();
> +		thread = std::make_unique<Thread>();
>   
>   		timeout = !thread->wait();
>   		if (timeout) {



More information about the libcamera-devel mailing list