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