[libcamera-devel] [PATCH 2/5] test: message: Add slow receiver test
Niklas Söderlund
niklas.soderlund at ragnatech.se
Wed Nov 27 16:04:18 CET 2019
Hi Laurent,
Thanks for your patch.
On 2019-11-27 10:49:06 +0200, Laurent Pinchart wrote:
> There's a race in the message delivery against object deletion. Add a
> test that triggers it reliably. This test is expected to fail with an
> assertion error.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
I like how natural this test feels which means the API must be good
right ;-)
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> test/message.cpp | 32 ++++++++++++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
>
> diff --git a/test/message.cpp b/test/message.cpp
> index cf21d5ca50d1..7ebedb557502 100644
> --- a/test/message.cpp
> +++ b/test/message.cpp
> @@ -52,6 +52,25 @@ private:
> Status status_;
> };
>
> +class SlowMessageReceiver : public Object
> +{
> +protected:
> + void message(Message *msg)
> + {
> + if (msg->type() != Message::None) {
> + Object::message(msg);
> + return;
> + }
> +
> + /*
> + * Don't access any member of the object here (including the
> + * vtable) as the object will be deleted by the main thread
> + * while we're sleeping.
> + */
> + this_thread::sleep_for(chrono::milliseconds(100));
> + }
> +};
> +
> class MessageTest : public Test
> {
> protected:
> @@ -88,6 +107,19 @@ protected:
> break;
> }
>
> + /*
> + * Test for races between message delivery and object deletion.
> + * Failures result in assertion errors, there is no need for
> + * explicit checks.
> + */
> + SlowMessageReceiver *slowReceiver = new SlowMessageReceiver();
> + slowReceiver->moveToThread(&thread_);
> + slowReceiver->postMessage(utils::make_unique<Message>(Message::None));
> +
> + this_thread::sleep_for(chrono::milliseconds(10));
> +
> + delete slowReceiver;
> +
> return TestPass;
> }
>
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list