In particular we can see failed assertions (and probably crashes or corruption) in multithreaded code that relys on the mesh-provided point_locator() incorrectly: MeshFunction, PeriodicBoundaries, ExactSolution/ExactErrorEstimator, and RBEIMSystem are likely affected.
The correct solution is to use the existing "master" functionality in PointLocator, and just have point_locator() always return a new subordinate PointLocator rather than the unique master. That way we still only generate one copy of the expensive tree but we make per-thread copies of the cached _element type data. However, this solution *won't work* with the existing point_locator() API, which returns a reference and so doesn't let us impose any memory management semantics - user code won't know to delete the return value when finished, and MeshBase won't know when the user code is finished. I'd like to change point_locator() to return an AutoPtr instead, an API-incompatible change. The alternative would be to just deprecate the existing function and create a new one with a different name. Any preferences? --- Roy ------------------------------------------------------------------------------ Fulfilling the Lean Software Promise Lean software platforms are now widely adopted and the benefits have been demonstrated beyond question. Learn why your peers are replacing JEE containers with lightweight application servers - and what you can gain from the move. http://p.sf.net/sfu/vmware-sfemails _______________________________________________ Libmesh-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libmesh-devel
