[Mesa-dev] [PATCH 02/21] glsl: protect locale_t with a mutex
Petri Latvala
petri.latvala at intel.com
Tue May 6 01:53:01 PDT 2014
On 05/06/2014 01:04 AM, Kenneth Graunke wrote:
> On 05/05/2014 10:01 AM, Ian Romanick wrote:
>>
>> The problem I see with that is we don't know what order constructors on
>> global objects will occur. Are we sure the contructor will be invoked
>> before we need the locale now and in the future?
> These functions are used during lexing to read floating point
> literals...without breaking on locales where the decimal point is a comma.
>
> All constructors have definitely been run by that point, and I can't
> imagine we'll ever need to call locale-independent strtof/strtod from
> other constructors.
>
The order of constructors in a single TU is well defined. The usual
pattern for this kind of initialization is to have the initializer
object in the header as static:
In strtod.h:
struct loc_initializer
{
_Initializer()
{
if (!loc) {
loc = initialize_it();
}
}
};
static loc_initializer loc_init;
Any global object constructor that might use loc will have to #include
strtod.h, therefore loc_init will appear first in that TU, and will
initialize first.
A real-world example would be std::_Init that initializes std::cout and
its pals.
--
Petri Latvala
More information about the mesa-dev
mailing list