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