aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/buildgraph/depscanner.cpp
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2017-01-09 17:35:19 +0100
committerJoerg Bornemann <joerg.bornemann@qt.io>2017-01-10 10:52:18 +0000
commitfce1e8b993841752346b51e889aed66a39cfc7a3 (patch)
tree8c884e1536d8c66164b70c12973401e02b5c3fc9 /src/lib/corelib/buildgraph/depscanner.cpp
parent17362f3ca028a44c020314acabec1fe4206c0266 (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.cpp28
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,