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:
parent
9d59b50a9f
commit
dbaa16de07
@ -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
|
||||||
// ----------------
|
// ----------------
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user