Try to fix an order-of-initialisation problem with error_category references.

The symptom, which only occurs in some applications, is a crash due to a
dereference of a null pointer. The exact conditions under which the problem
occurs are not fully understood, so this fix is probably more paranoid than
necessary.


[SVN r41100]
This commit is contained in:
Christopher Kohlhoff
2007-11-15 06:19:04 +00:00
parent 966931ad20
commit 4d3adbca3f
4 changed files with 9 additions and 9 deletions

View File

@ -46,7 +46,7 @@ namespace boost
namespace cygwin_error
{
inline error_code make_error_code( cygwin_errno e )
{ return error_code( e, system_category ); }
{ return error_code( e, get_system_category() ); }
}
}
}

View File

@ -219,7 +219,7 @@ namespace boost
public:
// constructors:
error_condition() : m_val(0), m_cat(&posix_category) {}
error_condition() : m_val(0), m_cat(&get_posix_category()) {}
error_condition( int val, const error_category & cat ) : m_val(val), m_cat(&cat) {}
template <class ConditionEnum>
@ -248,7 +248,7 @@ namespace boost
void clear()
{
m_val = 0;
m_cat = &posix_category;
m_cat = &get_posix_category();
}
// observers:
@ -306,7 +306,7 @@ namespace boost
public:
// constructors:
error_code() : m_val(0), m_cat(&system_category) {}
error_code() : m_val(0), m_cat(&get_system_category()) {}
error_code( int val, const error_category & cat ) : m_val(val), m_cat(&cat) {}
template <class CodeEnum>
@ -334,7 +334,7 @@ namespace boost
void clear()
{
m_val = 0;
m_cat = &system_category;
m_cat = &get_system_category();
}
// observers:
@ -442,11 +442,11 @@ namespace boost
{
// explicit conversion:
inline error_code make_error_code( posix_errno e )
{ return error_code( e, posix_category ); }
{ return error_code( e, get_posix_category() ); }
// implicit conversion:
inline error_condition make_error_condition( posix_errno e )
{ return error_condition( e, posix_category ); }
{ return error_condition( e, get_posix_category() ); }
}
// error_category default implementation -------------------------------//

View File

@ -99,7 +99,7 @@ namespace boost
namespace linux_error
{
inline error_code make_error_code( linux_errno e )
{ return error_code( e, system_category ); }
{ return error_code( e, get_system_category() ); }
}
} // namespace system

View File

@ -107,7 +107,7 @@ namespace boost
namespace windows_error
{
inline error_code make_error_code( windows_error_code e )
{ return error_code( e, system_category ); }
{ return error_code( e, get_system_category() ); }
}
} // namespace system