diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-01-09 17:35:19 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-01-10 10:52:18 +0000 |
commit | fce1e8b993841752346b51e889aed66a39cfc7a3 (patch) | |
tree | 8c884e1536d8c66164b70c12973401e02b5c3fc9 /src/lib/corelib/buildgraph/depscanner.cpp | |
parent | 17362f3ca028a44c020314acabec1fe4206c0266 (diff) |
Set script engine's active flag while executing custom scanners
This reverts commit 6a8a7f4fb25ff7259ed66de70b9b4f956dfe0e14 and fixes
QBS-782 in a simpler way, without instantiating another ScriptEngine.
Having two script engines in the executor thread is wasteful and even
potentially dangerous.
Also, the removal of the setProcessEventsInterval(-1) call allows us to
cancel long running user dependency scanners.
Task-number: QBS-782
Change-Id: If680c66c901c809718013860be3d81241e0f782b
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/lib/corelib/buildgraph/depscanner.cpp')
-rw-r--r-- | src/lib/corelib/buildgraph/depscanner.cpp | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/lib/corelib/buildgraph/depscanner.cpp b/src/lib/corelib/buildgraph/depscanner.cpp index 95d0adcf5..8378f9c7a 100644 --- a/src/lib/corelib/buildgraph/depscanner.cpp +++ b/src/lib/corelib/buildgraph/depscanner.cpp @@ -150,24 +150,18 @@ bool PluginDependencyScanner::areModulePropertiesCompatible(const PropertyMapCon } UserDependencyScanner::UserDependencyScanner(const ResolvedScannerConstPtr &scanner, - const Logger &logger) + const Logger &logger, ScriptEngine *engine) : m_scanner(scanner), m_logger(logger), - m_engine(new ScriptEngine(m_logger, EvalContext::RuleExecution)), + m_engine(engine), m_observer(m_engine), m_product(0) { - m_engine->setProcessEventsInterval(-1); // QBS-782 m_global = m_engine->newObject(); m_global.setPrototype(m_engine->globalObject()); setupScriptEngineForFile(m_engine, m_scanner->scanScript->fileContext, m_global); } -UserDependencyScanner::~UserDependencyScanner() -{ - delete m_engine; -} - QStringList UserDependencyScanner::collectSearchPaths(Artifact *artifact) { return evaluate(artifact, m_scanner->searchPathsScript); @@ -207,8 +201,26 @@ bool UserDependencyScanner::areModulePropertiesCompatible(const PropertyMapConst return m1 == m2 || m1->value() == m2->value(); } +class ScriptEngineActiveFlagGuard +{ + ScriptEngine *m_engine; +public: + ScriptEngineActiveFlagGuard(ScriptEngine *engine) + : m_engine(engine) + { + m_engine->setActive(true); + } + + ~ScriptEngineActiveFlagGuard() + { + m_engine->setActive(false); + } +}; + QStringList UserDependencyScanner::evaluate(Artifact *artifact, const ScriptFunctionPtr &script) { + ScriptEngineActiveFlagGuard guard(m_engine); + if (artifact->product.data() != m_product) { m_product = artifact->product.data(); setupScriptEngineForProduct(m_engine, artifact->product, |