diff --git a/src/language/node_processor/FunctionProcessor.hpp b/src/language/node_processor/FunctionProcessor.hpp index 2a8db08f29fa7ad061c46c7c1b7679a53138ea2b..c45faaa3935da1102660293ee863799d9a3aa195 100644 --- a/src/language/node_processor/FunctionProcessor.hpp +++ b/src/language/node_processor/FunctionProcessor.hpp @@ -63,10 +63,10 @@ class FunctionProcessor : public INodeProcessor DataVariant execute(ExecutionPolicy& exec_policy) { - ExecutionPolicy context_exec_policy{exec_policy, - ExecutionPolicy::Context{m_context_id, - std::make_shared<ExecutionPolicy::Context::Values>( - m_context_size)}}; + // Context is built in each execution for thread safety: multiple thread can call a function at once + ExecutionPolicy::Context context{m_context_id, std::make_shared<ExecutionPolicy::Context::Values>(m_context_size)}; + + ExecutionPolicy context_exec_policy{exec_policy, context}; if (m_argument_converters.size() == 1) { m_argument_converters[0]->convert(context_exec_policy, m_argument_node.execute(context_exec_policy));