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