fix race condition which could result in assert failures in debug builds and infinite loops in release (#9094)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56712 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-11-08 22:41:10 +00:00
parent 2681874846
commit a715b99070

View File

@@ -1143,8 +1143,6 @@ void wxEvtHandler::QueueEvent(wxEvent *event)
m_pendingEvents->Append(event);
wxLEAVE_CRIT_SECT( m_pendingEventsLock );
// 2) Add this event handler to list of event handlers that
// have pending events.
@@ -1157,6 +1155,14 @@ void wxEvtHandler::QueueEvent(wxEvent *event)
wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
// only release m_pendingEventsLock now because otherwise there is a race
// condition as described in the ticket #9093: we could process the event
// just added to m_pendingEvents in our ProcessPendingEvents() below before
// we had time to append this pointer to wxPendingEvents list; thus
// breaking the invariant that a handler should be in the list iff it has
// any pending events to process
wxLEAVE_CRIT_SECT( m_pendingEventsLock );
// 3) Inform the system that new pending events are somewhere,
// and that these should be processed in idle time.
wxWakeUpIdle();