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:
parent
652b47249a
commit
edbcdebba7
1 changed files with 12 additions and 7 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue