]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/appcmn.cpp
Small bugfix
[wxWidgets.git] / src / common / appcmn.cpp
index 3276436a6eec6f578fe393e434c2225ae3a402ca..b01cdd229c74331915ea13c555bb99395c8eb0ef 100644 (file)
 void wxAppBase::ProcessPendingEvents()
 {
     // ensure that we're the only thread to modify the pending events list
 void wxAppBase::ProcessPendingEvents()
 {
     // ensure that we're the only thread to modify the pending events list
-    wxCRIT_SECT_LOCKER(locker, *wxPendingEventsLocker);
+    wxENTER_CRIT_SECT( *wxPendingEventsLocker );
 
     if ( !wxPendingEvents )
 
     if ( !wxPendingEvents )
+    {
+        wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
         return;
         return;
+    }
 
     // iterate until the list becomes empty
     wxNode *node = wxPendingEvents->First();
     while (node)
     {
         wxEvtHandler *handler = (wxEvtHandler *)node->Data();
 
     // iterate until the list becomes empty
     wxNode *node = wxPendingEvents->First();
     while (node)
     {
         wxEvtHandler *handler = (wxEvtHandler *)node->Data();
+        delete node;
 
 
+        // In ProcessPendingEvents(), new handlers might be add
+       // and we can safely leave the critical section here.
+        wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
         handler->ProcessPendingEvents();
         handler->ProcessPendingEvents();
+        wxENTER_CRIT_SECT( *wxPendingEventsLocker );
 
 
-        delete node;
         node = wxPendingEvents->First();
     }
         node = wxPendingEvents->First();
     }
+    
+    wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
 }
 
 int wxAppBase::OnExit()
 }
 
 int wxAppBase::OnExit()