diff options
author | Tuomas Tuononen <tuomas.tuononen@code-q.fi> | 2015-09-16 10:19:07 +0300 |
---|---|---|
committer | Tuomas Tuononen <tuomas.tuononen@code-q.fi> | 2015-10-15 07:26:36 +0000 |
commit | 8049f836e7ff9b5514a46020a07e6ce5ce375576 (patch) | |
tree | e29213df9dab64d4d3b98d235ce82c3cd6bd7242 /src/asr/qspeechrecognition.cpp | |
parent | 5a4d83ffa26eed44b5f6e71527ad9bf9b3ccb4c0 (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-x | src/asr/qspeechrecognition.cpp | 8 |
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) |