From: Timo Sirainen Date: Tue, 23 Aug 2011 01:44:03 +0000 (+0300) Subject: fts-lucene: Fixed memory leak in snowball analyzer. X-Git-Tag: 2.1.alpha1~64 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=920f6ee17b0c4aaa98e0043a575655eb84fc01a4;p=thirdparty%2Fdovecot%2Fcore.git fts-lucene: Fixed memory leak in snowball analyzer. --- diff --git a/src/plugins/fts-lucene/Snowball.cc b/src/plugins/fts-lucene/Snowball.cc index 18b73889b0..85580fdca7 100644 --- a/src/plugins/fts-lucene/Snowball.cc +++ b/src/plugins/fts-lucene/Snowball.cc @@ -29,9 +29,11 @@ CL_NS_DEF2(analysis,snowball) SnowballAnalyzer::SnowballAnalyzer(const char* language) { this->language = strdup(language); stopSet = NULL; + prevstream = NULL; } SnowballAnalyzer::~SnowballAnalyzer(){ + if (prevstream) _CLDELETE(prevstream); _CLDELETE_CARRAY(language); if ( stopSet != NULL ) _CLDELETE(stopSet); @@ -69,6 +71,11 @@ CL_NS_DEF2(analysis,snowball) return result; } + TokenStream* SnowballAnalyzer::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + if (prevstream) _CLDELETE(prevstream); + prevstream = this->tokenStream(fieldName, reader); + return prevstream; + } diff --git a/src/plugins/fts-lucene/SnowballAnalyzer.h b/src/plugins/fts-lucene/SnowballAnalyzer.h index 45f002de66..c82fd99074 100644 --- a/src/plugins/fts-lucene/SnowballAnalyzer.h +++ b/src/plugins/fts-lucene/SnowballAnalyzer.h @@ -22,6 +22,7 @@ CL_NS_DEF2(analysis,snowball) class CLUCENE_CONTRIBS_EXPORT SnowballAnalyzer: public Analyzer { char* language; CLTCSetList* stopSet; + TokenStream *prevstream; public: /** Builds the named analyzer with no stop words. */ @@ -37,6 +38,7 @@ public: StandardFilter}, a {@link LowerCaseFilter} and a {@link StopFilter}. */ TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader, bool deleteReader); + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); }; CL_NS_END2