From dbaa16de075ca1f81ee663f11a67cecf4c0eb7bd Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 2 Jan 2008 21:18:15 +0000 Subject: [PATCH] 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 --- include/wx/log.h | 6 +++++- src/common/log.cpp | 11 ++++++++--- src/generic/logg.cpp | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/include/wx/log.h b/include/wx/log.h index 30e0edb2ca..a4d800e623 100644 --- a/include/wx/log.h +++ b/include/wx/log.h @@ -308,9 +308,13 @@ protected: // log a message indicating the number of times the previous message was // repeated if ms_prevCounter > 0, does nothing otherwise; return the old // value of ms_prevCounter - unsigned LogLastRepetitionCountIfNeeded(); + unsigned LogLastRepeatIfNeeded(); private: + // implement of LogLastRepeatIfNeeded(): it assumes that the + // caller had already locked ms_prevCS + unsigned LogLastRepeatIfNeededUnlocked(); + // static variables // ---------------- diff --git a/src/common/log.cpp b/src/common/log.cpp index 13c0136753..250b7b3924 100644 --- a/src/common/log.cpp +++ b/src/common/log.cpp @@ -457,10 +457,15 @@ void WXDLLIMPEXP_BASE wxVLogSysError(unsigned long err, const wxString& format, // wxLog class implementation // ---------------------------------------------------------------------------- -unsigned wxLog::LogLastRepetitionCountIfNeeded() +unsigned wxLog::LogLastRepeatIfNeeded() { wxCRIT_SECT_LOCKER(lock, ms_prevCS); + return LogLastRepeatIfNeededUnlocked(); +} + +unsigned wxLog::LogLastRepeatIfNeededUnlocked() +{ const unsigned count = ms_prevCounter; if ( ms_prevCounter ) @@ -485,7 +490,7 @@ unsigned wxLog::LogLastRepetitionCountIfNeeded() wxLog::~wxLog() { - LogLastRepetitionCountIfNeeded(); + LogLastRepeatIfNeeded(); } /* static */ @@ -509,7 +514,7 @@ void wxLog::OnLog(wxLogLevel level, const wxString& szString, time_t t) return; } - pLogger->LogLastRepetitionCountIfNeeded(); + pLogger->LogLastRepeatIfNeededUnlocked(); // reset repetition counter for a new message ms_prevString = szString; diff --git a/src/generic/logg.cpp b/src/generic/logg.cpp index cba360cc86..ecac929db9 100644 --- a/src/generic/logg.cpp +++ b/src/generic/logg.cpp @@ -275,7 +275,7 @@ void wxLogGui::Flush() // do it right now to block any new calls to Flush() while we're here m_bHasMessages = false; - const unsigned repeatCount = LogLastRepetitionCountIfNeeded(); + const unsigned repeatCount = LogLastRepeatIfNeeded(); wxString appName = wxTheApp->GetAppDisplayName(); -- 2.47.2