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

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

View File

@@ -297,7 +297,11 @@ private:
// this is the replacement of DoLogNumberOfRepeats() (which has to be kept // this is the replacement of DoLogNumberOfRepeats() (which has to be kept
// to avoid breaking ABI in this version) // to avoid breaking ABI in this version)
unsigned LogLastRepetitionCountIfNeeded(); unsigned LogLastRepeatIfNeeded();
// implementation of the function above which supposes that the caller had
// already locked gs_prevCS
unsigned LogLastRepeatIfNeededUnlocked();
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -287,13 +287,18 @@ wxCRIT_SECT_DECLARE(gs_prevCS);
unsigned wxLog::DoLogNumberOfRepeats() unsigned wxLog::DoLogNumberOfRepeats()
{ {
wxLog * const pLogger = GetActiveTarget(); wxLog * const pLogger = GetActiveTarget();
return pLogger ? pLogger->LogLastRepetitionCountIfNeeded() : 0u; return pLogger ? pLogger->LogLastRepeatIfNeeded() : 0u;
} }
unsigned wxLog::LogLastRepetitionCountIfNeeded() unsigned wxLog::LogLastRepeatIfNeeded()
{ {
wxCRIT_SECT_LOCKER(lock, gs_prevCS); wxCRIT_SECT_LOCKER(lock, gs_prevCS);
return LogLastRepeatIfNeededUnlocked();
}
unsigned wxLog::LogLastRepeatIfNeededUnlocked()
{
long retval = ms_prevCounter; long retval = ms_prevCounter;
if ( ms_prevCounter > 0 ) if ( ms_prevCounter > 0 )
{ {
@@ -315,7 +320,7 @@ unsigned wxLog::LogLastRepetitionCountIfNeeded()
wxLog::~wxLog() wxLog::~wxLog()
{ {
LogLastRepetitionCountIfNeeded(); LogLastRepeatIfNeeded();
} }
/* static */ /* static */
@@ -339,7 +344,7 @@ void wxLog::OnLog(wxLogLevel level, const wxChar *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;