From 3d8f3ad9fa05ced16999fe89a877dba14b1421e4 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 19 Sep 2014 13:21:24 -0700 Subject: [PATCH] Fixes concurrency issue with scriptengine timers --- libraries/script-engine/src/ScriptEngine.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 29423b7116..cfea0d6b86 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -605,18 +605,18 @@ void ScriptEngine::stop() { void ScriptEngine::timerFired() { QTimer* callingTimer = reinterpret_cast(sender()); - - // call the associated JS function, if it exists QScriptValue timerFunction = _timerFunctionMap.value(callingTimer); - if (timerFunction.isValid()) { - timerFunction.call(); - } - + if (!callingTimer->isActive()) { // this timer is done, we can kill it _timerFunctionMap.remove(callingTimer); delete callingTimer; } + + // call the associated JS function, if it exists + if (timerFunction.isValid()) { + timerFunction.call(); + } } QObject* ScriptEngine::setupTimerWithInterval(const QScriptValue& function, int intervalMS, bool isSingleShot) {