summaryrefslogtreecommitdiffstats
path: root/src/asr/qspeechrecognition.cpp
diff options
context:
space:
mode:
authorTuomas Tuononen <tuomas.tuononen@code-q.fi>2015-09-16 10:19:07 +0300
committerTuomas Tuononen <tuomas.tuononen@code-q.fi>2015-10-15 07:26:36 +0000
commit8049f836e7ff9b5514a46020a07e6ce5ce375576 (patch)
treee29213df9dab64d4d3b98d235ce82c3cd6bd7242 /src/asr/qspeechrecognition.cpp
parent5a4d83ffa26eed44b5f6e71527ad9bf9b3ccb4c0 (diff)
SpeechRecognition: Wait for manager thread to exit on destruction
This prevents a crash on application exit: the plug-in was unloaded before the thread was finished. Change-Id: I335fef4d881450fa72268f001780e3e59b300920 Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
Diffstat (limited to 'src/asr/qspeechrecognition.cpp')
-rwxr-xr-xsrc/asr/qspeechrecognition.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/asr/qspeechrecognition.cpp b/src/asr/qspeechrecognition.cpp
index e827c62..e0ffe75 100755
--- a/src/asr/qspeechrecognition.cpp
+++ b/src/asr/qspeechrecognition.cpp
@@ -625,7 +625,6 @@ QSpeechRecognitionPrivate::QSpeechRecognitionPrivate():
m_unmuteTimer.setSingleShot(true);
QObject::connect(m_managerThread, &QThread::started, m_manager, &QSpeechRecognitionManager::init);
QObject::connect(m_managerThread, &QThread::finished, m_manager, &QSpeechRecognitionManager::deleteLater);
- QObject::connect(m_managerThread, &QThread::finished, m_managerThread, &QThread::deleteLater);
QObject::connect(&m_unmuteTimer, &QTimer::timeout, m_managerInterface, &QSpeechRecognitionManagerInterface::onUnmuteTimeout);
m_manager->moveToThread(m_managerThread);
@@ -665,8 +664,13 @@ QSpeechRecognitionPrivate::QSpeechRecognitionPrivate():
QSpeechRecognitionPrivate::~QSpeechRecognitionPrivate()
{
- m_managerThread->exit();
delete m_managerInterface;
+ m_managerThread->exit();
+ if (!m_managerThread->wait(5000)) {
+ m_managerThread->terminate();
+ m_managerThread->wait();
+ }
+ delete m_managerThread;
}
void QSpeechRecognitionPrivate::onEngineCreated(const QString &engineName)