test: message: Destroy Object from correct thread context

The MessageReceiver and RecursiveMessageReceiver used in the test are
destroyed from the main thread, which is invalid for a thread-bound
object bound to a different thread. Fix it by destroying them with
deleteLater().

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Milan Zamazal <mzamazal@redhat.com>
This commit is contained in:
Laurent Pinchart 2024-01-21 04:45:40 +02:00
parent 652b47249a
commit edbcdebba7

View file

@ -109,16 +109,19 @@ protected:
return TestFail; return TestFail;
} }
MessageReceiver receiver; MessageReceiver *receiver = new MessageReceiver();
receiver.moveToThread(&thread_); receiver->moveToThread(&thread_);
thread_.start(); thread_.start();
receiver.postMessage(std::make_unique<Message>(Message::None)); receiver->postMessage(std::make_unique<Message>(Message::None));
this_thread::sleep_for(chrono::milliseconds(100)); this_thread::sleep_for(chrono::milliseconds(100));
switch (receiver.status()) { MessageReceiver::Status status = receiver->status();
receiver->deleteLater();
switch (status) {
case MessageReceiver::NoMessage: case MessageReceiver::NoMessage:
cout << "No message received" << endl; cout << "No message received" << endl;
return TestFail; return TestFail;
@ -135,8 +138,7 @@ protected:
* leaks. Two messages need to be posted to ensure we don't only * leaks. Two messages need to be posted to ensure we don't only
* test the simple case of a queue containing a single message. * test the simple case of a queue containing a single message.
*/ */
std::unique_ptr<RecursiveMessageReceiver> recursiveReceiver = RecursiveMessageReceiver *recursiveReceiver = new RecursiveMessageReceiver();
std::make_unique<RecursiveMessageReceiver>();
recursiveReceiver->moveToThread(&thread_); recursiveReceiver->moveToThread(&thread_);
recursiveReceiver->postMessage(std::make_unique<Message>(Message::None)); recursiveReceiver->postMessage(std::make_unique<Message>(Message::None));
@ -144,7 +146,10 @@ protected:
this_thread::sleep_for(chrono::milliseconds(10)); this_thread::sleep_for(chrono::milliseconds(10));
if (!recursiveReceiver->success()) { bool success = recursiveReceiver->success();
recursiveReceiver->deleteLater();
if (!success) {
cout << "Recursive message delivery failed" << endl; cout << "Recursive message delivery failed" << endl;
return TestFail; return TestFail;
} }