X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8b73c5318ccc837aff38c0e5a824bc4fd56c75c8..ef6ece2352e739f843d9fc08d96d46b6467b83d6:/src/common/string.cpp diff --git a/src/common/string.cpp b/src/common/string.cpp index 85b3090533..82acf49d86 100644 --- a/src/common/string.cpp +++ b/src/common/string.cpp @@ -60,6 +60,18 @@ const size_t wxString::npos = (size_t) -1; #if wxUSE_STRING_POS_CACHE +struct wxStrCacheInitializer +{ + wxStrCacheInitializer() + { + // calling this function triggers s_cache initialization in it, and + // from now on it becomes safe to call from multiple threads + wxString::GetCache(); + } +}; + +static wxStrCacheInitializer gs_stringCacheInit; + // gdb seems to be unable to display thread-local variables correctly, at least // not my 6.4.98 version under amd64, so provide this debugging helper to do it #ifdef __WXDEBUG__ @@ -93,12 +105,9 @@ void wxDumpStrCache() { wxStrCacheDumper::ShowAll(); } wxString::CacheStats wxString::ms_cacheStats; -namespace -{ - -struct ShowCacheStats +struct wxStrCacheStatsDumper { - ~ShowCacheStats() + ~wxStrCacheStatsDumper() { const wxString::CacheStats& stats = wxString::ms_cacheStats; @@ -123,9 +132,9 @@ struct ShowCacheStats stats.lentot, 100.*float(stats.lenhits)/stats.lentot); } } -} s_showCacheStats; +}; -} // anonymous namespace +static wxStrCacheStatsDumper s_showCacheStats; #endif // wxPROFILE_STRING_CACHE