test: object-delete: Test deferred delete just before thread stops
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@ideasonboard.com> Reviewed-by: Milan Zamazal <mzamazal@redhat.com>
This commit is contained in:
parent
d5c9b726bd
commit
d47fa37c2e
1 changed files with 25 additions and 5 deletions
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue