changeset 13279:7d4e9c85ff2d

fts-lucene: Fixed memory leak in snowball analyzer.
author Timo Sirainen <tss@iki.fi>
date Tue, 23 Aug 2011 04:44:03 +0300
parents fa2425fd9cf4
children 0e2b79d2be59
files src/plugins/fts-lucene/Snowball.cc src/plugins/fts-lucene/SnowballAnalyzer.h
diffstat 2 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/fts-lucene/Snowball.cc	Tue Aug 23 03:31:50 2011 +0300
+++ b/src/plugins/fts-lucene/Snowball.cc	Tue Aug 23 04:44:03 2011 +0300
@@ -29,9 +29,11 @@
   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 @@
     return result;
   }
   
+  TokenStream* SnowballAnalyzer::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) {
+      if (prevstream) _CLDELETE(prevstream);
+      prevstream = this->tokenStream(fieldName, reader);
+      return prevstream;
+  }
   
   
   
--- a/src/plugins/fts-lucene/SnowballAnalyzer.h	Tue Aug 23 03:31:50 2011 +0300
+++ b/src/plugins/fts-lucene/SnowballAnalyzer.h	Tue Aug 23 04:44:03 2011 +0300
@@ -22,6 +22,7 @@
 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 @@
       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