From 5382e6cef9750341bc4fee6814bab0ecb54a7f55 Mon Sep 17 00:00:00 2001
From: Christoph Lehmann <christoph.lehmann@ufz.de>
Date: Mon, 13 Mar 2023 10:59:24 +0100
Subject: [PATCH] [PaL] Made function parameter thread safe

---
 ParameterLib/FunctionParameter.h | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/ParameterLib/FunctionParameter.h b/ParameterLib/FunctionParameter.h
index e919d56d421..6cf9a720bf5 100644
--- a/ParameterLib/FunctionParameter.h
+++ b/ParameterLib/FunctionParameter.h
@@ -121,14 +121,20 @@ struct FunctionParameter final : public Parameter<T>
                 "coordinates.");
         }
         auto const coords = pos.getCoordinates().value();
-        x = coords[0];
-        y = coords[1];
-        z = coords[2];
-        time = t;
 
-        for (unsigned i = 0; i < _vec_expression.size(); i++)
         {
-            cache[i] = _vec_expression[i].value();
+            std::lock_guard lock_guard(_mutex);
+            x = coords[0];
+            y = coords[1];
+            z = coords[2];
+            time = t;
+
+            {
+                for (unsigned i = 0; i < _vec_expression.size(); i++)
+                {
+                    cache[i] = _vec_expression[i].value();
+                }
+            }
         }
 
         if (!this->_coordinate_system)
@@ -143,6 +149,7 @@ private:
     symbol_table_t _symbol_table;
     std::vector<expression_t> _vec_expression;
     std::vector<std::pair<std::string, CurveWrapper>> _curves;
+    mutable std::mutex _mutex;
 };
 
 std::unique_ptr<ParameterBase> createFunctionParameter(
-- 
GitLab