]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts-lucene: Fixed memory leak in snowball analyzer.
authorTimo Sirainen <tss@iki.fi>
Tue, 23 Aug 2011 01:44:03 +0000 (04:44 +0300)
committerTimo Sirainen <tss@iki.fi>
Tue, 23 Aug 2011 01:44:03 +0000 (04:44 +0300)
src/plugins/fts-lucene/Snowball.cc
src/plugins/fts-lucene/SnowballAnalyzer.h

index 18b73889b0b6f60f1616d5ae1fbf2ccf7142b7ea..85580fdca735e39c9c70b78a3b22c78196bffd86 100644 (file)
@@ -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;
+  }
   
   
   
index 45f002de66b538706e04873b1c78b003ebdc3cd1..c82fd990741f25fd0f2d6bfdf610a9806cf08490 100644 (file)
@@ -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