X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f0756afed903e7dba726bb4789bf83b760dba31a..cda6fc01ba80a7a0cd159d10ccaeaea6573bf41b:/src/common/appbase.cpp diff --git a/src/common/appbase.cpp b/src/common/appbase.cpp index ef32e59f1d..3901c4def1 100644 --- a/src/common/appbase.cpp +++ b/src/common/appbase.cpp @@ -269,6 +269,11 @@ wxMessageOutput *wxAppConsole::CreateMessageOutput() void wxAppConsole::ProcessPendingEvents() { +#if wxUSE_THREADS + if ( !wxPendingEventsLocker ) + return; +#endif + // ensure that we're the only thread to modify the pending events list wxENTER_CRIT_SECT( *wxPendingEventsLocker ); @@ -288,7 +293,9 @@ void wxAppConsole::ProcessPendingEvents() // In ProcessPendingEvents(), new handlers might be add // and we can safely leave the critical section here. wxLEAVE_CRIT_SECT( *wxPendingEventsLocker ); + handler->ProcessPendingEvents(); + wxENTER_CRIT_SECT( *wxPendingEventsLocker ); node = wxPendingEvents->GetFirst(); @@ -772,7 +779,19 @@ void ShowAssertDialog(const wxChar *szFile, StackDump dump; dump.Walk(5); // don't show OnAssert() call itself - const wxString& stackTrace = dump.GetStackTrace(); + wxString stackTrace = dump.GetStackTrace(); + + // don't show more than maxLines or we could get a dialog too tall to be + // shown on screen: 20 should be ok everywhere as even with 15 pixel high + // characters it is still only 300 pixels... + const int maxLines = 20; + int count = stackTrace.Freq(wxT('\n')); + if (count > maxLines) + { + int i; + for (i = 0; i < count - maxLines; i++) + stackTrace = stackTrace.BeforeLast(wxT('\n')); + } if ( !stackTrace.empty() ) { msg << _T("\n\nCall stack:\n")