You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2013/12/08 11:12:34 UTC

svn commit: r1549013 - in /lucene/dev/branches/branch_4x: ./ lucene/ lucene/CHANGES.txt lucene/core/ lucene/core/src/java/org/apache/lucene/index/IndexReader.java lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java

Author: simonw
Date: Sun Dec  8 10:12:34 2013
New Revision: 1549013

URL: http://svn.apache.org/r1549013
Log:
LUCENE-5362: IndexReader and SegmentCoreReaders now throw AlreadyClosedException if the refCount in incremented but is less that 1.

Modified:
    lucene/dev/branches/branch_4x/   (props changed)
    lucene/dev/branches/branch_4x/lucene/   (props changed)
    lucene/dev/branches/branch_4x/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_4x/lucene/core/   (props changed)
    lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/IndexReader.java
    lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java

Modified: lucene/dev/branches/branch_4x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/CHANGES.txt?rev=1549013&r1=1549012&r2=1549013&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/CHANGES.txt Sun Dec  8 10:12:34 2013
@@ -46,6 +46,12 @@ Bug fixes
 * LUCENE-5285: Improved highlighting of multi-valued fields with
   FastVectorHighlighter. (Nik Everett via Adrien Grand)
 
+Changes in Runtime Behavior
+
+* LUCENE-5362: IndexReader and SegmentCoreReaders now throw 
+  AlreadyClosedException if the refCount in incremented but
+  is less that 1. (Simon Willnauer) 
+
 ======================= Lucene 4.6.0 =======================
 
 New Features

Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/IndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/IndexReader.java?rev=1549013&r1=1549012&r2=1549013&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/IndexReader.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/IndexReader.java Sun Dec  8 10:12:34 2013
@@ -170,8 +170,9 @@ public abstract class IndexReader implem
    * @see #tryIncRef
    */
   public final void incRef() {
-    ensureOpen();
-    refCount.incrementAndGet();
+    if (!tryIncRef()) {
+       ensureOpen();
+    }
   }
   
   /**

Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java?rev=1549013&r1=1549012&r2=1549013&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java Sun Dec  8 10:12:34 2013
@@ -32,6 +32,7 @@ import org.apache.lucene.codecs.Postings
 import org.apache.lucene.codecs.StoredFieldsReader;
 import org.apache.lucene.codecs.TermVectorsReader;
 import org.apache.lucene.index.SegmentReader.CoreClosedListener;
+import org.apache.lucene.store.AlreadyClosedException;
 import org.apache.lucene.store.CompoundFileDirectory;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
@@ -146,7 +147,13 @@ final class SegmentCoreReaders {
   }
   
   void incRef() {
-    ref.incrementAndGet();
+    int count;
+    while ((count = ref.get()) > 0) {
+      if (ref.compareAndSet(count, count+1)) {
+        return;
+      }
+    }
+    throw new AlreadyClosedException("SegmentCoreReaders is already closed");
   }
 
   NumericDocValues getNormValues(FieldInfo fi) throws IOException {