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

Reply via email to