On 10/26/12 18:50, Martin Sebor wrote:
On 10/26/2012 06:50 AM, Liviu Nicoara wrote:
[...]
tl;dr: removing the facet data cache is a priority. All else can be put
on the back-burner.
[...]
// facet data accessor
...
if (0 == _C_impsize) { // 1
mutex_lock ();
if (_C_impsize)
return _C_data;
_C_data = get_facet_data (); // 2
?? // 3
_C_impsize = 1; // 4
mutex_unlock ();
}
?? // 5
return _C_data; // 6
[...]
Various compilers provide these features in various forms, but at the
moment we don't have a unified STDCXX API to implement this.
[...]
I suggested moving the body of the outer if from the header
into a .cpp file in the library where we could implement
ugly, bloated locking without the risk of breaking things
if we removed/replaced it in the future. That's when we ran
into questions about how exactly to do this cleanly, etc.
It didn't seem to be doable very cleanly but I still think
it's a viable approach.
Just making sure we are talking about the same thing. My argument (and the code
oversimplification above) was about the initialization of the std::facet data,
not the cached numpunct data. I think we should get rid of the numpunct cache
right away because it makes the facet unusable in MT builds.
As for the DCII I was talking about in the previous post, I would tackle it but
I only have access to x86(_64). Does the foundation have shared dev machines?
Liviu