Fix crash when using wxThreadSpecificInfo from global object ctor.
When not using compiler TLS support (which is the default now), TLS variable itself needs to be initialized and user-defined code in the global objects ctor could be called before this happened, resulting in using uninitialized CRITICAL_SECTION under Windows and a crash. Fix this by wrapping global wxThreadSpecificInfo itself in an accessor function ensuring that it is always initialized before use. Notice that this required adding wxTLS_TYPE_REF() as wxTLS_TYPE() itself can't be used for the function return value (__thread or similar can only be used on the variables). Closes #16009. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_3_0_BRANCH@75948 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -44,6 +44,7 @@
|
||||
|
||||
#ifdef wxHAS_COMPILER_TLS
|
||||
#define wxTLS_TYPE(T) wxTHREAD_SPECIFIC_DECL T
|
||||
#define wxTLS_TYPE_REF(T) T&
|
||||
#define wxTLS_PTR(var) (&(var))
|
||||
#define wxTLS_VALUE(var) (var)
|
||||
#else // !wxHAS_COMPILER_TLS
|
||||
@@ -135,6 +136,7 @@
|
||||
};
|
||||
|
||||
#define wxTLS_TYPE(T) wxTlsValue<T>
|
||||
#define wxTLS_TYPE_REF(T) wxTLS_TYPE(T)&
|
||||
#define wxTLS_PTR(var) ((var).Get())
|
||||
#define wxTLS_VALUE(var) (*(var))
|
||||
#endif // wxHAS_COMPILER_TLS/!wxHAS_COMPILER_TLS
|
||||
|
Reference in New Issue
Block a user