[libcamera-devel] [PATCH] test: threads: Fix memory leak
Sebastian Fricke
sebastian.fricke at posteo.net
Mon Apr 12 06:21:36 CEST 2021
Hey Laurent,
Thank you for the patch.
On 12.04.2021 00:36, Laurent Pinchart wrote:
>The last instance of Thread allocated in the test is never deleted, not
s/not/nor/ ?
>are other instances deleted in error paths. Use a std::unique_ptr<> to
>ensure deletion.
I tested this fix and valgrind does not report any leaked memory from
the libcamera tests. But just out of curiosity do you get a similar
report in valgrind:
```
basti at nanopct4:~/libcamera$ valgrind --leak-check=full --show-leak-kinds=all ninja -C build test
...
libcamera 0.0.0
Configuration
Enabled pipelines : ipu3
raspberrypi
rkisp1
simple
uvcvideo
vimc
Android support : False
GStreamer support : False
V4L2 emulation support: False
cam application : True
qcam application : False
Unit tests : True
Option werror is: true [default: true]
...
==6151== LEAK SUMMARY:
==6151== definitely lost: 296 bytes in 1 blocks
==6151== indirectly lost: 576 bytes in 2 blocks
==6151== possibly lost: 0 bytes in 0 blocks
==6151== still reachable: 2,725,231 bytes in 15,220 blocks
==6151== suppressed: 0 bytes in 0 blocks
```
Those are all related to our build tool ninja.
>
>Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Tested-by: Sebastian Fricke <sebastian.fricke at posteo.net>
Greetings,
Sebastian
>---
> 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) {
>--
>Regards,
>
>Laurent Pinchart
>
>_______________________________________________
>libcamera-devel mailing list
>libcamera-devel at lists.libcamera.org
>https://lists.libcamera.org/listinfo/libcamera-devel
More information about the libcamera-devel
mailing list