diff --git a/Numeric/BasisFactory.cpp b/Numeric/BasisFactory.cpp index 60f8ea8aa10ea9847393232f2d583a63621fdff2..129011088747e34b91fab94e7efcc5c1a119990a 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)