Skip to content

Commit 0534875

Browse files
Fixed yet another deadlock in script stopping
1 parent 7934ece commit 0534875

File tree

11 files changed

+11
-14
lines changed

11 files changed

+11
-14
lines changed

trikControl/src/soundSensorWorker.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414

1515
#include "soundSensorWorker.h"
1616

17-
#include <QtCore/QDebug>
18-
1917
using namespace trikControl;
2018

2119
SoundSensorWorker::SoundSensorWorker(const QString &script, const QString &inputFile, const QString &outputFile

trikGui/wiFiInitWidget.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
#include <QtCore/QString>
1818
#include <QtCore/QStringList>
19-
#include <QtCore/QDebug>
2019

2120
#include <QtGui/QKeyEvent>
2221

trikGui/wiFiModeWidget.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include "wiFiModeWidget.h"
1616

1717
#include <QtGui/QKeyEvent>
18-
#include <QtCore/QDebug>
1918

2019
#include <trikKernel/paths.h>
2120
#include <QsLog.h>

trikNetwork/src/mailbox.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ QString Mailbox::receive(bool wait)
120120
QString result;
121121

122122
QEventLoop loop;
123-
QObject::connect(this, SIGNAL(stopWaitingSignal()), &loop, SLOT(quit()));
123+
QObject::connect(this, SIGNAL(stopWaitingSignal()), &loop, SLOT(quit()), Qt::QueuedConnection);
124+
124125
if (!mWorker->hasMessages() && wait) {
125126
loop.exec();
126127
}

trikNetwork/src/mailboxConnection.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
#include <QtCore/QStringList>
1818

19-
#include <QtCore/QDebug>
20-
2119
#include <QsLog.h>
2220

2321
using namespace trikNetwork;

trikScriptRunner/src/scriptEngineWorker.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ void ScriptEngineWorker::stopScript()
114114
return;
115115
}
116116

117+
117118
while (mState == starting) {
118119
// Some script is starting right now, so we are in inconsistent state. Let it start, then stop it.
119120
QThread::yieldCurrentThread();
@@ -125,8 +126,11 @@ void ScriptEngineWorker::stopScript()
125126

126127
mScriptControl.reset();
127128

129+
if (mMailbox) {
130+
mMailbox->stopWaiting();
131+
}
132+
128133
mThreading.reset();
129-
mMailbox->stopWaiting();
130134

131135
if (mDirectScriptsEngine) {
132136
mDirectScriptsEngine->abortEvaluation();

trikScriptRunner/src/scriptExecutionControl.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
#include "scriptExecutionControl.h"
1616

17-
#include <QtCore/QDebug>
1817
#include <QtCore/QDateTime>
1918
#include <QtCore/QCoreApplication>
2019
#include <QtCore/QProcess>

trikScriptRunner/src/scriptThread.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,15 @@ void ScriptThread::run()
4141
qsrand(QDateTime::currentMSecsSinceEpoch());
4242

4343
mEngine->evaluate(mScript);
44+
4445
if (mEngine->hasUncaughtException()) {
4546
const int line = mEngine->uncaughtExceptionLineNumber();
4647
const QString message = mEngine->uncaughtException().toString();
4748
mError = tr("Line %1: %2").arg(QString::number(line), message);
4849
QLOG_ERROR() << "Uncaught exception at line" << line << ":" << message;
4950
} else if (mThreading.inEventDrivenMode()) {
5051
QEventLoop loop;
51-
connect(this, SIGNAL(stopRunning()), &loop, SLOT(quit()), Qt::DirectConnection);
52+
connect(this, SIGNAL(stopRunning()), &loop, SLOT(quit()), Qt::QueuedConnection);
5253
loop.exec();
5354
}
5455

trikScriptRunner/src/threading.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,17 +160,17 @@ void Threading::reset()
160160
}
161161

162162
mMessageMutex.unlock();
163-
164163
mThreadsMutex.lock();
164+
165165
for (ScriptThread *thread : mThreads.values()) {
166166
mScriptControl.reset(); // TODO: find more sophisticated solution to prevent waiting after abortion
167167
thread->abort();
168168
}
169169

170170
mFinishedThreads.clear();
171171
mThreadsMutex.unlock();
172-
173172
mScriptControl.reset();
173+
174174
waitForAll();
175175

176176
qDeleteAll(mMessageQueueMutexes);

trikWiFi/src/trikWiFi.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
#include <QtCore/QStringList>
1818
#include <QtNetwork/QNetworkInterface>
19-
#include <QtCore/QDebug>
2019

2120
#include <QsLog.h>
2221

0 commit comments

Comments
 (0)