From 9b50e459ffbfdbafed118ac8bbd981e567c47f4f Mon Sep 17 00:00:00 2001
From: Nicolas Marsic <nicolas.marsic@gmail.com>
Date: Tue, 19 Nov 2013 12:49:42 +0000
Subject: [PATCH] Thread safe BasisFactory::getNodalBasis()

---
 Numeric/BasisFactory.cpp | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/Numeric/BasisFactory.cpp b/Numeric/BasisFactory.cpp
index 60f8ea8aa1..1290110887 100644
--- a/Numeric/BasisFactory.cpp
+++ b/Numeric/BasisFactory.cpp
@@ -45,10 +45,17 @@ const nodalBasis* BasisFactory::getNodalBasis(int tag)
       return NULL;
   }
 
-  // FIXME: check if already exists to deallocate if necessary
-  fs.insert(std::make_pair(tag, F));
+  std::pair<std::map<int, nodalBasis*>::const_iterator, bool> inserted;
 
-  return F;
+  #pragma omp critical
+    {
+      inserted = fs.insert(std::make_pair(tag, F));
+
+      if (!inserted.second)
+        delete F;
+    }
+
+  return inserted.first->second;
 }
 
 const JacobianBasis* BasisFactory::getJacobianBasis(int tag)
-- 
GitLab