don't lock the gs_prevCS critical section recursively (replaces patch 1857581)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50993 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2008-01-02 21:18:15 +00:00
parent 9d59b50a9f
commit dbaa16de07
3 changed files with 14 additions and 5 deletions

View File

@ -308,9 +308,13 @@ protected:
// log a message indicating the number of times the previous message was // log a message indicating the number of times the previous message was
// repeated if ms_prevCounter > 0, does nothing otherwise; return the old // repeated if ms_prevCounter > 0, does nothing otherwise; return the old
// value of ms_prevCounter // value of ms_prevCounter
unsigned LogLastRepetitionCountIfNeeded(); unsigned LogLastRepeatIfNeeded();
private: private:
// implement of LogLastRepeatIfNeeded(): it assumes that the
// caller had already locked ms_prevCS
unsigned LogLastRepeatIfNeededUnlocked();
// static variables // static variables
// ---------------- // ----------------

View File

@ -457,10 +457,15 @@ void WXDLLIMPEXP_BASE wxVLogSysError(unsigned long err, const wxString& format,
// wxLog class implementation // wxLog class implementation
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
unsigned wxLog::LogLastRepetitionCountIfNeeded() unsigned wxLog::LogLastRepeatIfNeeded()
{ {
wxCRIT_SECT_LOCKER(lock, ms_prevCS); wxCRIT_SECT_LOCKER(lock, ms_prevCS);
return LogLastRepeatIfNeededUnlocked();
}
unsigned wxLog::LogLastRepeatIfNeededUnlocked()
{
const unsigned count = ms_prevCounter; const unsigned count = ms_prevCounter;
if ( ms_prevCounter ) if ( ms_prevCounter )
@ -485,7 +490,7 @@ unsigned wxLog::LogLastRepetitionCountIfNeeded()
wxLog::~wxLog() wxLog::~wxLog()
{ {
LogLastRepetitionCountIfNeeded(); LogLastRepeatIfNeeded();
} }
/* static */ /* static */
@ -509,7 +514,7 @@ void wxLog::OnLog(wxLogLevel level, const wxString& szString, time_t t)
return; return;
} }
pLogger->LogLastRepetitionCountIfNeeded(); pLogger->LogLastRepeatIfNeededUnlocked();
// reset repetition counter for a new message // reset repetition counter for a new message
ms_prevString = szString; ms_prevString = szString;

View File

@ -275,7 +275,7 @@ void wxLogGui::Flush()
// do it right now to block any new calls to Flush() while we're here // do it right now to block any new calls to Flush() while we're here
m_bHasMessages = false; m_bHasMessages = false;
const unsigned repeatCount = LogLastRepetitionCountIfNeeded(); const unsigned repeatCount = LogLastRepeatIfNeeded();
wxString appName = wxTheApp->GetAppDisplayName(); wxString appName = wxTheApp->GetAppDisplayName();