[libcamera-devel] [PATCH 08/19] test: signal: Add additional disconnection tests for Object
Jacopo Mondi
jacopo at jmondi.org
Mon Jan 20 14:48:44 CET 2020
Hi Laurent,
On Mon, Jan 20, 2020 at 02:24:26AM +0200, Laurent Pinchart wrote:
> Add two tests that exercise the Signal::disconnect(Object *) and
> Signal::disconnect() methods, to verify that they correctly remove the
> signal from the connected object's list of signals. This triggers an
> issue that was detected through manual code inspection, and is expected
> to crash or at least generate valgrind warnings.
>
I can confirm the following is gone in the next commits
==25012== Invalid read of size 8
==25012== at 0x112E8D: std::__cxx11::list<libcamera::BoundMethodBase*, std::allocator<libcamera::BoundMethodBase*> >::begin() (stl_list.h:942)
==25012== by 0x4A3253C: void libcamera::SignalBase::disconnect<libcamera::Object>(libcamera::Object*) (signal.h:25)
==25012== by 0x4A31A0B: libcamera::Object::~Object() (object.cpp:80)
==25012== by 0x11AA87: SlotObject::~SlotObject() (signal.cpp:31)
==25012== by 0x11AAAB: SlotObject::~SlotObject() (signal.cpp:31)
==25012== by 0x112536: SignalTest::run() (signal.cpp:233)
==25012== by 0x11B41D: Test::execute() (test.cpp:36)
==25012== by 0x1113E6: main (signal.cpp:317)
==25012== Address 0x50d3690 is 0 bytes inside a block of size 24 free'd
==25012== at 0x4839EAB: operator delete(void*) (vg_replace_malloc.c:586)
==25012== by 0x11250E: SignalTest::run() (signal.cpp:232)
==25012== by 0x11B41D: Test::execute() (test.cpp:36)
==25012== by 0x1113E6: main (signal.cpp:317)
==25012== Block was alloc'd at
==25012== at 0x4838DEF: operator new(unsigned long) (vg_replace_malloc.c:344)
==25012== by 0x11240D: SignalTest::run() (signal.cpp:228)
==25012== by 0x11B41D: Test::execute() (test.cpp:36)
==25012== by 0x1113E6: main (signal.cpp:317)
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Thanks
j
> ---
> test/signal.cpp | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/test/signal.cpp b/test/signal.cpp
> index 0054ed5a380d..f83ceb05f091 100644
> --- a/test/signal.cpp
> +++ b/test/signal.cpp
> @@ -220,6 +220,30 @@ protected:
> delete dynamicSignal;
> delete slotObject;
>
> + /*
> + * Test that signal manual disconnection from Object removes
> + * the signal for the object. This shall not generate any
> + * valgrind warning.
> + */
> + dynamicSignal = new Signal<>();
> + slotObject = new SlotObject();
> + dynamicSignal->connect(slotObject, &SlotObject::slot);
> + dynamicSignal->disconnect(slotObject);
> + delete dynamicSignal;
> + delete slotObject;
> +
> + /*
> + * Test that signal manual disconnection from all slots removes
> + * the signal for the object. This shall not generate any
> + * valgrind warning.
> + */
> + dynamicSignal = new Signal<>();
> + slotObject = new SlotObject();
> + dynamicSignal->connect(slotObject, &SlotObject::slot);
> + dynamicSignal->disconnect();
> + delete dynamicSignal;
> + delete slotObject;
> +
> /* Exercise the Object slot code paths. */
> slotObject = new SlotObject();
> signalVoid_.connect(slotObject, &SlotObject::slot);
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20200120/d06fe4bd/attachment.sig>
More information about the libcamera-devel
mailing list