test: signal-threads: Destroy Object from correct thread context

The SignalReceiver used in the test is destroyed from the main thread,
which is invalid for a thread-bound object bound to a different thread.
Fix it by destroying it 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 edbcdebba7
commit dfe81fd702

View file

@ -59,15 +59,20 @@ private:
class SignalThreadsTest : public Test class SignalThreadsTest : public Test
{ {
protected: protected:
int init()
{
receiver_ = new SignalReceiver();
signal_.connect(receiver_, &SignalReceiver::slot);
return TestPass;
}
int run() int run()
{ {
SignalReceiver receiver;
signal_.connect(&receiver, &SignalReceiver::slot);
/* Test that a signal is received in the main thread. */ /* Test that a signal is received in the main thread. */
signal_.emit(0); signal_.emit(0);
switch (receiver.status()) { switch (receiver_->status()) {
case SignalReceiver::NoSignal: case SignalReceiver::NoSignal:
cout << "No signal received for direct connection" << endl; cout << "No signal received for direct connection" << endl;
return TestFail; return TestFail;
@ -83,8 +88,8 @@ protected:
* Move the object to a thread and verify that the signal is * Move the object to a thread and verify that the signal is
* correctly delivered, with the correct data. * correctly delivered, with the correct data.
*/ */
receiver.reset(); receiver_->reset();
receiver.moveToThread(&thread_); receiver_->moveToThread(&thread_);
thread_.start(); thread_.start();
@ -92,7 +97,7 @@ protected:
this_thread::sleep_for(chrono::milliseconds(100)); this_thread::sleep_for(chrono::milliseconds(100));
switch (receiver.status()) { switch (receiver_->status()) {
case SignalReceiver::NoSignal: case SignalReceiver::NoSignal:
cout << "No signal received for message connection" << endl; cout << "No signal received for message connection" << endl;
return TestFail; return TestFail;
@ -104,7 +109,7 @@ protected:
break; break;
} }
if (receiver.value() != 42) { if (receiver_->value() != 42) {
cout << "Signal received with incorrect value" << endl; cout << "Signal received with incorrect value" << endl;
return TestFail; return TestFail;
} }
@ -114,11 +119,13 @@ protected:
void cleanup() void cleanup()
{ {
receiver_->deleteLater();
thread_.exit(0); thread_.exit(0);
thread_.wait(); thread_.wait();
} }
private: private:
SignalReceiver *receiver_;
Thread thread_; Thread thread_;
Signal<int> signal_; Signal<int> signal_;