[PATCH v2 03/12] test: object-delete: Test deferred delete just before thread stops
Milan Zamazal
mzamazal at redhat.com
Tue Jan 23 12:53:03 CET 2024
Laurent Pinchart <laurent.pinchart at ideasonboard.com> writes:
> The Object::deleteLater() function is expected to not race with stopping
> the thread the object is bound to. Add a test for this.
>
> The test currently fails, demonstrating a bug in libcamera.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Milan Zamazal <mzamazal at redhat.com>
> ---
> Changes since v1:
>
> - Fix typo in commit message
> ---
> test/object-delete.cpp | 30 +++++++++++++++++++++++++-----
> 1 file changed, 25 insertions(+), 5 deletions(-)
>
> diff --git a/test/object-delete.cpp b/test/object-delete.cpp
> index eabefe935974..80b7dc41cd37 100644
> --- a/test/object-delete.cpp
> +++ b/test/object-delete.cpp
> @@ -33,10 +33,10 @@ public:
> unsigned int *deleteCount_;
> };
>
> -class NewThread : public Thread
> +class DeleterThread : public Thread
> {
> public:
> - NewThread(Object *obj)
> + DeleterThread(Object *obj)
> : object_(obj)
> {
> }
> @@ -63,9 +63,9 @@ protected:
> unsigned int count = 0;
> TestObject *obj = new TestObject(&count);
>
> - NewThread thread(obj);
> - thread.start();
> - thread.wait();
> + DeleterThread delThread(obj);
> + delThread.start();
> + delThread.wait();
>
> Thread::current()->dispatchMessages(Message::Type::DeferredDelete);
>
> @@ -89,6 +89,26 @@ protected:
> return TestFail;
> }
>
> + /*
> + * Test that deleteLater() works properly when called just
> + * before the object's thread exits.
> + */
> + Thread boundThread;
> + boundThread.start();
> +
> + count = 0;
> + obj = new TestObject(&count);
> + obj->moveToThread(&boundThread);
> +
> + obj->deleteLater();
> + boundThread.exit();
> + boundThread.wait();
> +
> + if (count != 1) {
> + cout << "Object deletion right before thread exit failed (" << count << ")" << endl;
> + return TestFail;
> + }
> +
> return TestPass;
> }
> };
More information about the libcamera-devel
mailing list