From 73ff0308a9cdcf4a2f0b72c0d2c41e98b10dabb9 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Sat, 30 Apr 2016 15:23:50 -0700 Subject: [PATCH] some CR feedback --- libraries/script-engine/src/ScriptEngine.cpp | 12 +++++++++++- libraries/script-engine/src/ScriptEngine.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index a30a786b32..fd5df60415 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -140,6 +140,8 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNam connect(this, &QScriptEngine::signalHandlerException, this, [this](const QScriptValue& exception) { hadUncaughtExceptions(*this, _fileNameString); }); + + setProcessEventsInterval(MSECS_PER_SECOND); } ScriptEngine::~ScriptEngine() { @@ -193,6 +195,14 @@ void ScriptEngine::runInThread() { workerThread->start(); } +void ScriptEngine::threadSafeAbortEvaluation() { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "threadSafeAbortEvaluation"); + return; + } + abortEvaluation(); +} + void ScriptEngine::waitTillDoneRunning() { // If the script never started running or finished running before we got here, we don't need to wait for it if (_isRunning && _isThreaded) { @@ -213,7 +223,7 @@ void ScriptEngine::waitTillDoneRunning() { // if we've been waiting a second or more, then tell the script engine to stop evaluating if (elapsed > USECS_PER_SECOND) { qDebug() << "giving up on evaluation elapsed:" << elapsed << "calling abortEvaluation() script:" << scriptName; - abortEvaluation(); + threadSafeAbortEvaluation(); } // if we've been waiting for more than 5 seconds then we should be more aggessive about stopping diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index e8ce00c66c..f1bd7463d2 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -134,6 +134,7 @@ public: //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // NOTE - this is intended to be a public interface for Agent scripts, and local scripts, but not for EntityScripts Q_INVOKABLE void stop(); + Q_INVOKABLE void threadSafeAbortEvaluation(); bool isFinished() const { return _isFinished; } // used by Application and ScriptWidget bool isRunning() const { return _isRunning; } // used by ScriptWidget