You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2013/10/06 13:47:57 UTC

svn commit: r1529611 - /lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java

Author: shaie
Date: Sun Oct  6 11:47:56 2013
New Revision: 1529611

URL: http://svn.apache.org/r1529611
Log:
clean unused memory by SegmentReader

Modified:
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java?rev=1529611&r1=1529610&r2=1529611&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java Sun Oct  6 11:47:56 2013
@@ -47,6 +47,18 @@ import org.apache.lucene.util.RefCount;
  */
 public final class SegmentReader extends AtomicReader {
 
+  private static final class DocValuesRefCount extends RefCount<DocValuesProducer> {
+
+    public DocValuesRefCount(DocValuesProducer object) {
+      super(object);
+    }
+    
+    @Override
+    protected void release() throws IOException {
+      object.close();
+    }
+  }
+  
   private final SegmentInfoPerCommit si;
   private final Bits liveDocs;
 
@@ -261,7 +273,7 @@ public final class SegmentReader extends
     return genInfos;
   }
 
-  private RefCount<DocValuesProducer> newDocValuesProducer(SegmentInfoPerCommit si, IOContext context, Directory dir, 
+  private RefCount<DocValuesProducer> newDocValuesProducer(SegmentInfoPerCommit si, IOContext context, Directory dir,
       DocValuesFormat dvFormat, Long gen, List<FieldInfo> infos) throws IOException {
     Directory dvDir = dir;
     String segmentSuffix = "";
@@ -272,12 +284,7 @@ public final class SegmentReader extends
 
     // set SegmentReadState to list only the fields that are relevant to that gen
     SegmentReadState srs = new SegmentReadState(dvDir, si.info, new FieldInfos(infos.toArray(new FieldInfo[infos.size()])), context, segmentSuffix);
-    return new RefCount<DocValuesProducer>(dvFormat.fieldsProducer(srs)) {
-      @Override
-      protected void release() throws IOException {
-        object.close();
-      }
-    };
+    return new DocValuesRefCount(dvFormat.fieldsProducer(srs));
   }
 
   @Override
@@ -302,6 +309,10 @@ public final class SegmentReader extends
           }
         }
       }
+      genDVProducers.clear();
+      dvProducers.clear();
+      docValuesLocal.close();
+      docsWithFieldLocal.close();
       if (t != null) {
         if (t instanceof IOException) throw (IOException) t;
         if (t instanceof RuntimeException) throw (RuntimeException) t;