From: Vadim Zeitlin Date: Mon, 22 Nov 2010 01:22:56 +0000 (+0000) Subject: Delete pending objects in wxApp::ProcessPendingEvents() and not ProcessIdle(). X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/e819ca3aa5a6da0944180d0da45102457bffcff5?hp=86c6fc77e16b4d9e21734f0af071f62ebd4237c8 Delete pending objects in wxApp::ProcessPendingEvents() and not ProcessIdle(). Move DeletePendingObjects() call from ProcessPendingEvents() to ProcessIdle() to ensure that we delete the objects marked for destruction even if the application is sitting in a tight OnIdle() loop, i.e. if the idle event handler keeps requesting more events. Also make sure that the event loop terminates if its OnExit() was called even if the idle event handler continues to request more events. Closes #12424. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66229 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/appbase.cpp b/src/common/appbase.cpp index 86b87c16cb..34dbcf0089 100644 --- a/src/common/appbase.cpp +++ b/src/common/appbase.cpp @@ -370,6 +370,9 @@ bool wxAppConsoleBase::ProcessIdle() wxLog::FlushActive(); #endif + // Garbage collect all objects previously scheduled for destruction. + DeletePendingObjects(); + return event.MoreRequested(); } @@ -509,9 +512,6 @@ void wxAppConsoleBase::ProcessPendingEvents() wxLEAVE_CRIT_SECT(m_handlersWithPendingEventsLocker); } - - // Garbage collect all objects previously scheduled for destruction. - DeletePendingObjects(); } void wxAppConsoleBase::DeletePendingEvents() diff --git a/src/common/evtloopcmn.cpp b/src/common/evtloopcmn.cpp index 300a1885d1..aa1aca9cbc 100644 --- a/src/common/evtloopcmn.cpp +++ b/src/common/evtloopcmn.cpp @@ -139,7 +139,7 @@ int wxEventLoopManual::Run() // generate and process idle events for as long as we don't // have anything else to do - while ( !Pending() && ProcessIdle() ) + while ( !Pending() && ProcessIdle() && !m_shouldExit ) ; // if the "should exit" flag is set, the loop should terminate