From 576eed9941cfae3bc03ee82cff50aa83c7758fde Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 10 Nov 2016 17:12:06 -0800 Subject: [PATCH] use a mutex to avoid a smaller race --- libraries/script-engine/src/ScriptEngine.cpp | 21 +++++++++++--------- libraries/script-engine/src/ScriptEngine.h | 1 + 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index c6a9874c38..1569a1b9f1 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1214,16 +1214,19 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac QString contents = data[url]; if (contents.isNull()) { qCDebug(scriptengine) << "Error loading file: " << url << "line:" << __LINE__; - } else if (!_includedURLs.contains(url)) { - _includedURLs << url; - // Set the parent url so that path resolution will be relative - // to this script's url during its initial evaluation - _parentURL = url.toString(); - auto operation = [&]() { - evaluate(contents, url.toString()); - }; + } else { + std::lock_guard lock(_lock); + if (!_includedURLs.contains(url)) { + _includedURLs << url; + // Set the parent url so that path resolution will be relative + // to this script's url during its initial evaluation + _parentURL = url.toString(); + auto operation = [&]() { + evaluate(contents, url.toString()); + }; - doWithEnvironment(capturedEntityIdentifier, capturedSandboxURL, operation); + doWithEnvironment(capturedEntityIdentifier, capturedSandboxURL, operation); + } } } _parentURL = parentURL; diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index 01088660ff..2b2cb3c81a 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -245,6 +245,7 @@ protected: std::function _emitScriptUpdates{ [](){ return true; } }; + std::recursive_mutex _lock; }; #endif // hifi_ScriptEngine_h