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:10:42 UTC

svn commit: r1549012 - in /lucene/dev/trunk/lucene: CHANGES.txt core/src/java/org/apache/lucene/index/IndexReader.java core/src/java/org/apache/lucene/index/SegmentCoreReaders.java

Author: simonw
Date: Sun Dec  8 10:10:42 2013
New Revision: 1549012

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

Modified:
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexReader.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1549012&r1=1549011&r2=1549012&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Sun Dec  8 10:10:42 2013
@@ -101,6 +101,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/trunk/lucene/core/src/java/org/apache/lucene/index/IndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexReader.java?rev=1549012&r1=1549011&r2=1549012&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexReader.java Sun Dec  8 10:10:42 2013
@@ -168,8 +168,9 @@ public abstract class IndexReader implem
    * @see #tryIncRef
    */
   public final void incRef() {
-    ensureOpen();
-    refCount.incrementAndGet();
+    if (!tryIncRef()) {
+       ensureOpen();
+    }
   }
   
   /**

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java?rev=1549012&r1=1549011&r2=1549012&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java Sun Dec  8 10:10:42 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;
@@ -139,7 +140,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 {