X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/55b24eb8cd912f9a9db37193f31159634d93b293..ec38225e66be33459125f0df1c9e3695c27509c0:/src/common/log.cpp?ds=sidebyside diff --git a/src/common/log.cpp b/src/common/log.cpp index a55bee4511..1e8d596b06 100644 --- a/src/common/log.cpp +++ b/src/common/log.cpp @@ -68,10 +68,6 @@ #undef wxLOG_COMPONENT const char *wxLOG_COMPONENT = ""; -#if wxUSE_THREADS - -wxTLS_TYPE(wxThreadSpecificInfo) wxThreadInfoVar; - // this macro allows to define an object which will be initialized before any // other function in this file is called: this is necessary to allow log // functions to be used during static initialization (this is not advisable @@ -92,6 +88,10 @@ wxTLS_TYPE(wxThreadSpecificInfo) wxThreadInfoVar; \ type *gs_##name##Ptr = &Get##name() +#if wxUSE_THREADS + +wxTLS_TYPE(wxThreadSpecificInfo) wxThreadInfoVar; + namespace { @@ -109,7 +109,7 @@ WX_DEFINE_LOG_CS(BackgroundLog); // this one is used for protecting ms_aTraceMasks from concurrent access WX_DEFINE_LOG_CS(TraceMask); -// and this one is used for GetComponentLevels() +// and this one is used for GetComponentLevels() WX_DEFINE_LOG_CS(Levels); } // anonymous namespace @@ -350,9 +350,7 @@ wxLog::CallDoLogNow(wxLogLevel level, wxUIntPtr num = 0; if ( info.GetNumValue(wxLOG_KEY_SYS_ERROR_CODE, &num) ) { - long err = static_cast(num); - if ( !err ) - err = wxSysErrorCode(); + const long err = static_cast(num); suffix.Printf(_(" (error %ld: %s)"), err, wxSysErrorMsg(err)); } @@ -381,7 +379,9 @@ void wxLog::DoLogRecord(wxLogLevel level, // but to call both of them DoLog(level, (const char*)msg.mb_str(), info.timestamp); DoLog(level, (const wchar_t*)msg.wc_str(), info.timestamp); -#endif // WXWIN_COMPATIBILITY_2_8 +#else // !WXWIN_COMPATIBILITY_2_8 + wxUnusedVar(info); +#endif // WXWIN_COMPATIBILITY_2_8/!WXWIN_COMPATIBILITY_2_8 // TODO: it would be better to extract message formatting in a separate @@ -854,8 +854,15 @@ void wxLogChain::DoLogRecord(wxLogLevel level, m_logOld->LogRecord(level, msg, info); // and also send it to the new one - if ( m_logNew && m_logNew != this ) - m_logNew->LogRecord(level, msg, info); + if ( m_logNew ) + { + // don't call m_logNew->LogRecord() to avoid infinite recursion when + // m_logNew is this object itself + if ( m_logNew != this ) + m_logNew->LogRecord(level, msg, info); + else + wxLog::DoLogRecord(level, msg, info); + } } #ifdef __VISUALC__