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

View File

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

View File

@ -107,7 +107,7 @@ namespace boost
namespace windows_error namespace windows_error
{ {
inline error_code make_error_code( windows_error_code e ) 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 } // namespace system