[PATCH v2 03/12] test: object-delete: Test deferred delete just before thread stops
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Jan 23 02:12:40 CET 2024
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>
---
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;
}
};
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list