+#if wxUSE_THREADS
+
+void wxLog::FlushThreadMessages()
+{
+ // check if we have queued messages from other threads
+ wxLogRecords bufferedLogRecords;
+
+ {
+ wxCriticalSectionLocker lock(GetBackgroundLogCS());
+ bufferedLogRecords.swap(gs_bufferedLogRecords);
+
+ // release the lock now to not keep it while we are logging the
+ // messages below, allowing background threads to run
+ }
+
+ if ( !bufferedLogRecords.empty() )
+ {
+ for ( wxLogRecords::const_iterator it = bufferedLogRecords.begin();
+ it != bufferedLogRecords.end();
+ ++it )
+ {
+ CallDoLogNow(it->level, it->msg, it->info);
+ }
+ }
+}
+
+/* static */
+bool wxLog::IsThreadLoggingEnabled()
+{
+ return !wxThreadInfo.loggingDisabled;
+}
+
+/* static */
+bool wxLog::EnableThreadLogging(bool enable)
+{
+ const bool wasEnabled = !wxThreadInfo.loggingDisabled;
+ wxThreadInfo.loggingDisabled = !enable;
+ return wasEnabled;
+}
+
+#endif // wxUSE_THREADS
+