mirror of
https://github.com/boostorg/system.git
synced 2025-07-30 12:37:13 +02:00
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:
@ -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() ); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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 -------------------------------//
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user