summaryrefslogtreecommitdiff
path: root/src/lib/corelib/language/scriptengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/language/scriptengine.cpp')
-rw-r--r--src/lib/corelib/language/scriptengine.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/lib/corelib/language/scriptengine.cpp b/src/lib/corelib/language/scriptengine.cpp
index b1c6d1410..8f31b879f 100644
--- a/src/lib/corelib/language/scriptengine.cpp
+++ b/src/lib/corelib/language/scriptengine.cpp
@@ -97,6 +97,8 @@ uint qHash(const ScriptEngine::PropertyCacheKey &k, uint seed = 0)
combineHash(qHash(k.m_propertyName), qHash(k.m_propertyMap), seed), seed);
}
+std::mutex ScriptEngine::m_creationDestructionMutex;
+
ScriptEngine::ScriptEngine(Logger &logger, EvalContext evalContext, QObject *parent)
: QScriptEngine(parent), m_scriptImporter(new ScriptImporter(this)),
m_modulePropertyScriptClass(nullptr),
@@ -116,8 +118,17 @@ ScriptEngine::ScriptEngine(Logger &logger, EvalContext evalContext, QObject *par
extendJavaScriptBuiltins();
}
+ScriptEngine *ScriptEngine::create(Logger &logger, EvalContext evalContext, QObject *parent)
+{
+ std::lock_guard<std::mutex> lock(m_creationDestructionMutex);
+ return new ScriptEngine(logger, evalContext, parent);
+}
+
ScriptEngine::~ScriptEngine()
{
+ m_creationDestructionMutex.lock();
+ connect(this, &QObject::destroyed, std::bind(&std::mutex::unlock, &m_creationDestructionMutex));
+
releaseResourcesOfScriptObjects();
delete (m_scriptImporter);
if (m_elapsedTimeImporting != -1) {