From: Vadim Zeitlin Date: Wed, 2 Jan 2008 21:18:15 +0000 (+0000) Subject: don't lock the gs_prevCS critical section recursively (replaces patch 1857581) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/dbaa16de075ca1f81ee663f11a67cecf4c0eb7bd?ds=sidebyside 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 --- 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();