wxCriticalSection changes undone - should work now
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 1 Mar 1999 18:20:12 +0000 (18:20 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 1 Mar 1999 18:20:12 +0000 (18:20 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1842 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/string.cpp
src/msw/thread.cpp

index 37a116fa020d4e9561cad08cbee96e751e4e46f2..fbdedd721eb8ef53b258c45ec238f2c0e732f137 100644 (file)
@@ -1461,12 +1461,16 @@ void wxArrayString::Remove(const char *sz)
 
   // need a critical section to protect access to gs_compareFunction and
   // gs_sortAscending variables
-  static wxCriticalSection gs_critsectStringSort;
+  static wxCriticalSection *gs_critsectStringSort = NULL;
 
   // call this before the value of the global sort vars is changed/after
   // you're finished with them
-  #define START_SORT()     gs_critsectStringSort.Enter()
-  #define END_SORT()       gs_critsectStringSort.Leave()
+  #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()
index 3ee7c1149a9843ad07efe9f1f23f218a3f4463b6..1e642fd8e81fb851421275c360b51a441bee85e8 100644 (file)
@@ -257,29 +257,22 @@ private:
 
 wxCriticalSection::wxCriticalSection()
 {
-    m_critsect = NULL;
+    m_critsect = new wxCriticalSectionInternal;
 }
 
 wxCriticalSection::~wxCriticalSection()
 {
-    wxASSERT_MSG( !m_critsect, "Forgot to Leave() critical section" );
+    delete m_critsect;
 }
 
 void wxCriticalSection::Enter()
 {
-    m_critsect = new wxCriticalSectionInternal;
-
     ::EnterCriticalSection(*m_critsect);
 }
 
 void wxCriticalSection::Leave()
 {
-    wxCHECK_RET( m_critsect, "Leave() without matching Enter()" );
-
     ::LeaveCriticalSection(*m_critsect);
-
-    delete m_critsect;
-    m_critsect = NULL;
 }
 
 // ----------------------------------------------------------------------------