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