History

Fixed contexts for V8 callbacks

ksuprynowicz committed 3 years ago

Commit db15ed21 parent ab219453 files · +37 −9Browse files

Showing the changes to libraries/script-engine/src/v8/ScriptEngineV8.cpp (1 of 3 files). Show all

Unified · Split

libraries/script-engine/src/v8/ScriptEngineV8.cpp+16−0
@@ -1164,6 +1164,7 @@ ScriptValue ScriptEngineV8::newFunction(ScriptEngine::FunctionSignature fun, int · 1163 unmodified lines
11641164 (object->GetAlignedPointerFromInternalField(0));
11651165 ScriptEngineV8 *scriptEngine = reinterpret_cast<ScriptEngineV8*>
11661166 (object->GetAlignedPointerFromInternalField(1));
1167+ ContextScopeV8 contextScopeV8(scriptEngine);
11671168 ScriptContextV8Wrapper scriptContext(scriptEngine, &info, scriptEngine->getContext(), scriptEngine->currentContext()->parentContext());
11681169 ScriptContextGuard scriptContextGuard(&scriptContext);
11691170 ScriptValue result = function(&scriptContext, scriptEngine);
@@ -1433,3 +1434,18 @@ void ScriptEngineV8::dumpHeapObjectStatistics() { · 263 unmodified lines
14331434 }
14341435 }
14351436 }
1437+
1438+ContextScopeV8::ContextScopeV8(ScriptEngineV8 *engine) :
1439+ _engine(engine) {
1440+ Q_ASSERT(engine);
1441+ _isContextChangeNeeded = engine->getContext() != engine->getIsolate()->GetCurrentContext();
1442+ if (_isContextChangeNeeded) {
1443+ engine->pushContext(engine->getIsolate()->GetCurrentContext());
1444+ }
1445+}
1446+
1447+ContextScopeV8::~ContextScopeV8() {
1448+ if (_isContextChangeNeeded) {
1449+ _engine->popContext();
1450+ }
1451+}