A unit test would be good at catching bugs like this. On Mon, Dec 14, 2015 at 6:23 PM Enrico Granata via lldb-commits < lldb-commits@lists.llvm.org> wrote:
> Author: enrico > Date: Mon Dec 14 20:20:48 2015 > New Revision: 255603 > > URL: http://llvm.org/viewvc/llvm-project?rev=255603&view=rev > Log: > Fix a bug where language categories would hold on to their caches even > after changes > > > Modified: > lldb/trunk/include/lldb/DataFormatters/FormatManager.h > lldb/trunk/include/lldb/DataFormatters/LanguageCategory.h > lldb/trunk/source/DataFormatters/FormatManager.cpp > lldb/trunk/source/DataFormatters/LanguageCategory.cpp > > Modified: lldb/trunk/include/lldb/DataFormatters/FormatManager.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/FormatManager.h?rev=255603&r1=255602&r2=255603&view=diff > > ============================================================================== > --- lldb/trunk/include/lldb/DataFormatters/FormatManager.h (original) > +++ lldb/trunk/include/lldb/DataFormatters/FormatManager.h Mon Dec 14 > 20:20:48 2015 > @@ -238,11 +238,7 @@ public: > ShouldPrintAsOneLiner (ValueObject& valobj); > > void > - Changed () override > - { > - ++m_last_revision; > - m_format_cache.Clear (); > - } > + Changed () override; > > uint32_t > GetCurrentRevision () override > @@ -290,13 +286,13 @@ private: > bool did_strip_ref, > bool did_strip_typedef, > bool root_level = false); > - > + > + std::atomic<uint32_t> m_last_revision; > FormatCache m_format_cache; > + Mutex m_language_categories_mutex; > + LanguageCategories m_language_categories_map; > NamedSummariesMap m_named_summaries_map; > - std::atomic<uint32_t> m_last_revision; > TypeCategoryMap m_categories_map; > - LanguageCategories m_language_categories_map; > - Mutex m_language_categories_mutex; > > ConstString m_default_category_name; > ConstString m_system_category_name; > > Modified: lldb/trunk/include/lldb/DataFormatters/LanguageCategory.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/LanguageCategory.h?rev=255603&r1=255602&r2=255603&view=diff > > ============================================================================== > --- lldb/trunk/include/lldb/DataFormatters/LanguageCategory.h (original) > +++ lldb/trunk/include/lldb/DataFormatters/LanguageCategory.h Mon Dec 14 > 20:20:48 2015 > @@ -69,6 +69,9 @@ public: > lldb::TypeCategoryImplSP > GetCategory () const; > > + FormatCache& > + GetFormatCache (); > + > void > Enable (); > > > Modified: lldb/trunk/source/DataFormatters/FormatManager.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/FormatManager.cpp?rev=255603&r1=255602&r2=255603&view=diff > > ============================================================================== > --- lldb/trunk/source/DataFormatters/FormatManager.cpp (original) > +++ lldb/trunk/source/DataFormatters/FormatManager.cpp Mon Dec 14 20:20:48 > 2015 > @@ -123,6 +123,19 @@ GetFormatFromFormatName (const char *for > return false; > } > > +void > +FormatManager::Changed () > +{ > + ++m_last_revision; > + m_format_cache.Clear (); > + Mutex::Locker lang_locker(m_language_categories_mutex); > + for (auto& iter : m_language_categories_map) > + { > + if (iter.second) > + iter.second->GetFormatCache().Clear(); > + } > +} > + > bool > FormatManager::GetFormatFromCString (const char *format_cstr, > bool partial_match_ok, > @@ -1043,12 +1056,12 @@ FormatManager::GetHardcodedValidator (Fo > } > > FormatManager::FormatManager() : > + m_last_revision(0), > m_format_cache(), > + m_language_categories_mutex(Mutex::eMutexTypeRecursive), > + m_language_categories_map(), > m_named_summaries_map(this), > - m_last_revision(0), > m_categories_map(this), > - m_language_categories_map(), > - m_language_categories_mutex(Mutex::eMutexTypeRecursive), > m_default_category_name(ConstString("default")), > m_system_category_name(ConstString("system")), > m_vectortypes_category_name(ConstString("VectorTypes")) > @@ -1063,7 +1076,6 @@ FormatManager::FormatManager() : > void > FormatManager::LoadSystemFormatters() > { > - > TypeSummaryImpl::Flags string_flags; > string_flags.SetCascades(true) > .SetSkipPointers(true) > > Modified: lldb/trunk/source/DataFormatters/LanguageCategory.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/LanguageCategory.cpp?rev=255603&r1=255602&r2=255603&view=diff > > ============================================================================== > --- lldb/trunk/source/DataFormatters/LanguageCategory.cpp (original) > +++ lldb/trunk/source/DataFormatters/LanguageCategory.cpp Mon Dec 14 > 20:20:48 2015 > @@ -242,6 +242,12 @@ LanguageCategory::GetCategory () const > return m_category_sp; > } > > +FormatCache& > +LanguageCategory::GetFormatCache () > +{ > + return m_format_cache; > +} > + > void > LanguageCategory::Enable () > { > > > _______________________________________________ > lldb-commits mailing list > lldb-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits >
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits