Browse Source

Put all locks to one place.

pull/1003/head
Sebastian 3 years ago
parent
commit
2042eb8b9e
  1. 15
      backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintScriptEngine.cs
  2. 12
      backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/ScriptExecutionContext.cs

15
backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintScriptEngine.cs

@ -63,7 +63,7 @@ public sealed class JintScriptEngine : IScriptEngine, IScriptDescriptor
context.Complete(JsonMapper.Map(value));
}));
var result = Execute(context.Engine, script);
var result = Execute(context, script);
return await context.CompleteAsync() ?? JsonMapper.Map(result);
}
@ -109,7 +109,7 @@ public sealed class JintScriptEngine : IScriptEngine, IScriptDescriptor
}
}));
Execute(context.Engine, script);
Execute(context, script);
return await context.CompleteAsync() ?? vars.Data!;
}
@ -131,7 +131,7 @@ public sealed class JintScriptEngine : IScriptEngine, IScriptDescriptor
.Extend(vars, options)
.Extend(extensions);
var result = Execute(context.Engine, script);
var result = Execute(context, script);
return JsonMapper.Map(result);
}
@ -179,14 +179,11 @@ public sealed class JintScriptEngine : IScriptEngine, IScriptDescriptor
return new ScriptExecutionContext<T>(engine, ct);
}
private JsValue Execute(Engine engine, string script)
private JsValue Execute(ScriptExecutionContext context, string script)
{
var program = parser.Parse(script);
var parsed = parser.Parse(script);
lock (engine)
{
return engine.Evaluate(program);
}
return context.Evaluate(parsed);
}
private static Exception MapException(Exception inner)

12
backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/ScriptExecutionContext.cs

@ -5,7 +5,9 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using Esprima.Ast;
using Jint;
using Jint.Native;
using Squidex.Infrastructure.Tasks;
namespace Squidex.Domain.Apps.Core.Scripting;
@ -19,6 +21,8 @@ public abstract class ScriptExecutionContext : ScriptContext
Engine = engine;
}
public abstract JsValue Evaluate(Script program);
public abstract void Schedule(Func<IScheduler, CancellationToken, Task> action);
}
@ -51,6 +55,14 @@ public sealed class ScriptExecutionContext<T> : ScriptExecutionContext, ISchedul
tcs.TrySetResult(value);
}
public override JsValue Evaluate(Script script)
{
lock (Engine)
{
return Engine.Evaluate(script);
}
}
public override void Schedule(Func<IScheduler, CancellationToken, Task> action)
{
if (IsCompleted)

Loading…
Cancel
Save