Make init_decoders[] a function-local static, rather than global, to avoid

problems with order of initialisation of globals across translation units.
Thanks to Oleg Kosenkov for reporting this issue and suggesting a fix.


[SVN r37380]
This commit is contained in:
Christopher Kohlhoff
2007-04-06 09:12:28 +00:00
parent 111c30d99e
commit da0da6dc28

View File

@@ -261,7 +261,11 @@ namespace
decoder_element() : ed(0), md(0), wmd(0) {} decoder_element() : ed(0), md(0), wmd(0) {}
}; };
const decoder_element init_decoders[] = typedef std::vector< decoder_element > decoder_vec_type;
decoder_vec_type & decoder_vec()
{
static const decoder_element init_decoders[] =
#ifdef BOOST_WINDOWS_API #ifdef BOOST_WINDOWS_API
{ decoder_element( errno_ed, errno_md, errno_wmd ), { decoder_element( errno_ed, errno_md, errno_wmd ),
decoder_element( windows_ed, windows_md, windows_wmd) }; decoder_element( windows_ed, windows_md, windows_wmd) };
@@ -269,10 +273,6 @@ namespace
{ decoder_element( errno_ed, errno_md, errno_wmd ) }; { decoder_element( errno_ed, errno_md, errno_wmd ) };
#endif #endif
typedef std::vector< decoder_element > decoder_vec_type;
decoder_vec_type & decoder_vec()
{
static decoder_vec_type dv( init_decoders, static decoder_vec_type dv( init_decoders,
init_decoders + sizeof(init_decoders)/sizeof(decoder_element)); init_decoders + sizeof(init_decoders)/sizeof(decoder_element));
return dv; return dv;