diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2024-01-21 04:45:40 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2024-01-25 02:39:14 +0200 |
commit | dfe81fd702c96bfb3f7c5c46f1493d54dfcd1798 (patch) | |
tree | 98a46a3089948616454204cff3c734f1e80e9931 /test/signal-threads.cpp | |
parent | edbcdebba7602aeb30a12817088bbabbfc57c98b (diff) |
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>
Diffstat (limited to 'test/signal-threads.cpp')
-rw-r--r-- | test/signal-threads.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/test/signal-threads.cpp b/test/signal-threads.cpp index 8c550eb0..8c212b6f 100644 --- a/test/signal-threads.cpp +++ b/test/signal-threads.cpp @@ -59,15 +59,20 @@ private: class SignalThreadsTest : public Test { protected: - int run() + int init() { - SignalReceiver receiver; - signal_.connect(&receiver, &SignalReceiver::slot); + receiver_ = new SignalReceiver(); + signal_.connect(receiver_, &SignalReceiver::slot); + + return TestPass; + } + int run() + { /* Test that a signal is received in the main thread. */ signal_.emit(0); - switch (receiver.status()) { + switch (receiver_->status()) { case SignalReceiver::NoSignal: cout << "No signal received for direct connection" << endl; return TestFail; @@ -83,8 +88,8 @@ protected: * Move the object to a thread and verify that the signal is * correctly delivered, with the correct data. */ - receiver.reset(); - receiver.moveToThread(&thread_); + receiver_->reset(); + receiver_->moveToThread(&thread_); thread_.start(); @@ -92,7 +97,7 @@ protected: this_thread::sleep_for(chrono::milliseconds(100)); - switch (receiver.status()) { + switch (receiver_->status()) { case SignalReceiver::NoSignal: cout << "No signal received for message connection" << endl; return TestFail; @@ -104,7 +109,7 @@ protected: break; } - if (receiver.value() != 42) { + if (receiver_->value() != 42) { cout << "Signal received with incorrect value" << endl; return TestFail; } @@ -114,11 +119,13 @@ protected: void cleanup() { + receiver_->deleteLater(); thread_.exit(0); thread_.wait(); } private: + SignalReceiver *receiver_; Thread thread_; Signal<int> signal_; |