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?


Reply via email to