You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2009/03/02 17:43:42 UTC

svn commit: r749352 - in /lucene/java/branches/lucene_2_4: ./ CHANGES.txt src/java/org/apache/lucene/analysis/Analyzer.java

Author: mikemccand
Date: Mon Mar  2 16:43:42 2009
New Revision: 749352

URL: http://svn.apache.org/viewvc?rev=749352&view=rev
Log:
LUCENE-1186: add Analyzer.close() to close the internal ThreadLocal

Modified:
    lucene/java/branches/lucene_2_4/   (props changed)
    lucene/java/branches/lucene_2_4/CHANGES.txt
    lucene/java/branches/lucene_2_4/src/java/org/apache/lucene/analysis/Analyzer.java

Propchange: lucene/java/branches/lucene_2_4/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Mar  2 16:43:42 2009
@@ -1 +1 @@
-/lucene/java/trunk:708549,709456,712233,718540,719716,723149,734415,735043,746661,747251
+/lucene/java/trunk:708549,709456,712233,718540,719716,723149,734415,735043,746661,747251,748534,749326

Modified: lucene/java/branches/lucene_2_4/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_2_4/CHANGES.txt?rev=749352&r1=749351&r2=749352&view=diff
==============================================================================
--- lucene/java/branches/lucene_2_4/CHANGES.txt (original)
+++ lucene/java/branches/lucene_2_4/CHANGES.txt Mon Mar  2 16:43:42 2009
@@ -3,6 +3,9 @@
 
 ======================= 2.4.x branch (not yet released) =======================
 
+9. LUCENE-1186: Add Analyzer.close() to free internal ThreadLocal
+   resources.  (Christian Kohlschütter via Mike McCandless)
+
 Bug fixes
 
 1. LUCENE-1452: Fixed silent data-loss case whereby binary fields are
@@ -55,6 +58,9 @@
     if the max slop was exceeded; The wrong payload could be returned in 
     certain situations. (Jonathan Mamou, Greg Shackles, Mark Miller)
 
+14. LUCENE-1186: Add Analyzer.close() to free internal ThreadLocal
+    resources.  (Christian Kohlschütter via Mike McCandless)
+
 ======================= Release 2.4.0 2008-10-06 =======================
 
 Changes in backwards compatibility policy

Modified: lucene/java/branches/lucene_2_4/src/java/org/apache/lucene/analysis/Analyzer.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_2_4/src/java/org/apache/lucene/analysis/Analyzer.java?rev=749352&r1=749351&r2=749352&view=diff
==============================================================================
--- lucene/java/branches/lucene_2_4/src/java/org/apache/lucene/analysis/Analyzer.java (original)
+++ lucene/java/branches/lucene_2_4/src/java/org/apache/lucene/analysis/Analyzer.java Mon Mar  2 16:43:42 2009
@@ -20,6 +20,9 @@
 import java.io.Reader;
 import java.io.IOException;
 
+import org.apache.lucene.util.CloseableThreadLocal;
+import org.apache.lucene.store.AlreadyClosedException;
+
 /** An Analyzer builds TokenStreams, which analyze text.  It thus represents a
  *  policy for extracting index terms from text.
  *  <p>
@@ -44,20 +47,36 @@
     return tokenStream(fieldName, reader);
   }
 
-  private ThreadLocal tokenStreams = new ThreadLocal();
+  private CloseableThreadLocal tokenStreams = new CloseableThreadLocal();
 
   /** Used by Analyzers that implement reusableTokenStream
    *  to retrieve previously saved TokenStreams for re-use
    *  by the same thread. */
   protected Object getPreviousTokenStream() {
-    return tokenStreams.get();
+    try {
+      return tokenStreams.get();
+    } catch (NullPointerException npe) {
+      if (tokenStreams == null) {
+        throw new AlreadyClosedException("this Analyzer is closed");
+      } else {
+        throw npe;
+      }
+    }
   }
 
   /** Used by Analyzers that implement reusableTokenStream
    *  to save a TokenStream for later re-use by the same
    *  thread. */
   protected void setPreviousTokenStream(Object obj) {
-    tokenStreams.set(obj);
+    try {
+      tokenStreams.set(obj);
+    } catch (NullPointerException npe) {
+      if (tokenStreams == null) {
+        throw new AlreadyClosedException("this Analyzer is closed");
+      } else {
+        throw npe;
+      }
+    }
   }
 
 
@@ -78,4 +97,10 @@
   {
     return 0;
   }
+
+  /** Frees persistent resources used by this Analyzer */
+  public void close() {
+    tokenStreams.close();
+    tokenStreams = null;
+  }
 }