[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