wxArrayString::Sort() wasn't MT-safe even though it tried to
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39541 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -2397,19 +2397,7 @@ void wxArrayString::assign(const_iterator first, const_iterator last)
|
|||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
// need a critical section to protect access to gs_compareFunction and
|
// need a critical section to protect access to gs_compareFunction and
|
||||||
// gs_sortAscending variables
|
// gs_sortAscending variables
|
||||||
static wxCriticalSection *gs_critsectStringSort = NULL;
|
static wxCriticalSection gs_critsectStringSort;
|
||||||
|
|
||||||
// call this before the value of the global sort vars is changed/after
|
|
||||||
// you're finished with them
|
|
||||||
#define START_SORT() wxASSERT( !gs_critsectStringSort ); \
|
|
||||||
gs_critsectStringSort = new wxCriticalSection; \
|
|
||||||
gs_critsectStringSort->Enter()
|
|
||||||
#define END_SORT() gs_critsectStringSort->Leave(); \
|
|
||||||
delete gs_critsectStringSort; \
|
|
||||||
gs_critsectStringSort = NULL
|
|
||||||
#else // !threads
|
|
||||||
#define START_SORT()
|
|
||||||
#define END_SORT()
|
|
||||||
#endif // wxUSE_THREADS
|
#endif // wxUSE_THREADS
|
||||||
|
|
||||||
// function to use for string comparaison
|
// function to use for string comparaison
|
||||||
@@ -2440,7 +2428,7 @@ wxStringCompareFunction(const void *first, const void *second)
|
|||||||
// sort array elements using passed comparaison function
|
// sort array elements using passed comparaison function
|
||||||
void wxArrayString::Sort(CompareFunction compareFunction)
|
void wxArrayString::Sort(CompareFunction compareFunction)
|
||||||
{
|
{
|
||||||
START_SORT();
|
wxCRIT_SECT_LOCKER(lockCmpFunc, gs_critsectStringSort);
|
||||||
|
|
||||||
wxASSERT( !gs_compareFunction ); // must have been reset to NULL
|
wxASSERT( !gs_compareFunction ); // must have been reset to NULL
|
||||||
gs_compareFunction = compareFunction;
|
gs_compareFunction = compareFunction;
|
||||||
@@ -2449,8 +2437,6 @@ void wxArrayString::Sort(CompareFunction compareFunction)
|
|||||||
|
|
||||||
// reset it to NULL so that Sort(bool) will work the next time
|
// reset it to NULL so that Sort(bool) will work the next time
|
||||||
gs_compareFunction = NULL;
|
gs_compareFunction = NULL;
|
||||||
|
|
||||||
END_SORT();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
|
Reference in New Issue
Block a user