Chromium Code Reviews| Index: core/src/fxcodec/jbig2/JBig2_Context.cpp |
| diff --git a/core/src/fxcodec/jbig2/JBig2_Context.cpp b/core/src/fxcodec/jbig2/JBig2_Context.cpp |
| index f2c44b726aeb8562d00395ecf3ef7b05d6b3f019..54bc58aa4c43ce007a24973715089c0a4d7a3c10 100644 |
| --- a/core/src/fxcodec/jbig2/JBig2_Context.cpp |
| +++ b/core/src/fxcodec/jbig2/JBig2_Context.cpp |
| @@ -25,7 +25,10 @@ |
| // |
| // Disabled until we can figure out how to clear cache between documents. |
| // https://code.google.com/p/pdfium/issues/detail?id=207 |
| +#define DISABLE_SYMBOL_CACHE 1 |
|
Tom Sepez
2015/10/04 23:57:48
nit: some reason why we we need the "1", instead o
Lei Zhang
2015/10/05 00:38:26
Done.
|
| +#ifndef DISABLE_SYMBOL_CACHE |
| static const int kSymbolDictCacheMaxSize = 2; |
| +#endif |
| CJBig2_Context* CJBig2_Context::CreateContext( |
| const uint8_t* pGlobalData, |
| @@ -623,7 +626,8 @@ int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment* pSegment, |
| for (std::list<CJBig2_CachePair>::iterator it = m_pSymbolDictCache->begin(); |
| it != m_pSymbolDictCache->end(); ++it) { |
| if (it->first == key) { |
| - pSegment->m_Result.sd = it->second->DeepCopy(); |
| + nonstd::unique_ptr<CJBig2_SymbolDict> copy(it->second->DeepCopy()); |
| + pSegment->m_Result.sd = copy.release(); |
| m_pSymbolDictCache->push_front(*it); |
| m_pSymbolDictCache->erase(it); |
| cache_hit = true; |
| @@ -651,14 +655,17 @@ int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment* pSegment, |
| } |
| m_pStream->alignByte(); |
| } |
| - CJBig2_SymbolDict* value = pSegment->m_Result.sd->DeepCopy(); |
| +#ifndef DISABLE_SYMBOL_CACHE |
| + nonstd::unique_ptr<CJBig2_SymbolDict> value = |
| + pSegment->m_Result.sd->DeepCopy(); |
| if (value && kSymbolDictCacheMaxSize > 0) { |
| while (m_pSymbolDictCache->size() >= kSymbolDictCacheMaxSize) { |
| delete m_pSymbolDictCache->back().second; |
| m_pSymbolDictCache->pop_back(); |
| } |
| - m_pSymbolDictCache->push_front(CJBig2_CachePair(key, value)); |
| + m_pSymbolDictCache->push_front(CJBig2_CachePair(key, value.release())); |
| } |
| +#endif |
| } |
| if (wFlags & 0x0200) { |
| pSegment->m_Result.sd->m_bContextRetained = TRUE; |